大家一般调试 js 的时候怎么看变量呢?我被 undefined 给整死了

2014-11-02 15:23:52 +08:00
 jianghu52
今天做一个小东西,ajax传值到php后台,返回一个josn字符串,alert出来,就是undefined 的,被整的死去活来。
以前一直有个问题,动不动js alert的东西就是undefined ,我想知道一般人调试js的时候有什么好办法么?都是怎么alert变量的?
6958 次点击
所在节点    程序员
14 条回复
qqblog
2014-11-02 15:31:29 +08:00
webkit内核的浏览器都有Inspector,可断点调试JavaScript
xcatliu
2014-11-02 15:32:32 +08:00
一般就用 chrome 的 develop tools 吧,可以设置断点看变量值是什么。
涉及 ajax 的看看 network。
puras
2014-11-02 15:40:36 +08:00
调JS一直用FireFox中的FireBug,可以断点调试,也可以直接使用console.log打印变量。。。
还可查看好多东西,如LS所说的Network等
arslion
2014-11-02 15:44:32 +08:00
我比较粗暴, 直接console.log哈哈
NemoAlex
2014-11-02 15:55:49 +08:00
alert 出来是 undefined,就是 undefined 咯
ibigbug
2014-11-02 16:17:10 +08:00
看 network
如果嫌 alert 麻烦的话直接用 chrome 在 source 里面打断点
lincanbin
2014-11-02 16:46:08 +08:00
ajax的回调里是一个匿名函数,表面看起来你这个回调函数可能包在另一个函数里,但是实际上是异步执行,已经是另一个函数了,这个回调里能使用的变量,只有全局变量。
直接在回调函数里调用包着Ajax的那个函数里的变量是最常见的JavaScript作用域错误。
cdxem713
2014-11-02 18:57:37 +08:00
@lincanbin 不对吧,根据js的闭包,在回调函数里面肯定是能够用外部的局部变量的。
例如一般用ajax不都这么用么?
function getSomething() {
var ajax = new XmlHttpRequest();
ajax.open("get",url,true);
ajax.onreadystatechange= function() {
if (ajax.readyState== 4) {
if (ajax.status == 200) {
...........
}
}
};
ajax.send(null)
}
cdxem713
2014-11-02 19:00:16 +08:00
@lincanbin 唯一会出现问题的只有settimeout和setinterval,这两个的回调函数的外部应该是全局那个域。
具体的没有描述清楚,可以写个东西试试。
zhouzm
2014-11-02 20:16:17 +08:00
变量定义全加上 var ,基本上大部分变量作用域的问题就清除了,剩下的再利用 develop tools 断点调试吧
domino
2014-11-02 22:14:29 +08:00
chrome console
shuson
2014-11-03 09:18:20 +08:00
除了source里断点和network直接找request,response,还有其他好办法么?
不喜欢console.log打乱代码
zhhc
2014-11-03 10:40:30 +08:00
chrome 的console,network,beakpoints
jprovim
2014-11-03 14:16:01 +08:00
chrome做調試, 直接console.log. 與其debug不如花點時間去理解下JavaScript裡面的closure.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/143382

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX