V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
jianghu52
V2EX  ›  程序员

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

  •  
  •   jianghu52 · 2014-11-02 15:23:52 +08:00 · 7138 次点击
    这是一个创建于 3704 天前的主题,其中的信息可能已经有所发展或是发生改变。
    今天做一个小东西,ajax传值到php后台,返回一个josn字符串,alert出来,就是undefined 的,被整的死去活来。
    以前一直有个问题,动不动js alert的东西就是undefined ,我想知道一般人调试js的时候有什么好办法么?都是怎么alert变量的?
    14 条回复    2014-11-03 14:16:01 +08:00
    qqblog
        1
    qqblog  
       2014-11-02 15:31:29 +08:00
    webkit内核的浏览器都有Inspector,可断点调试JavaScript
    xcatliu
        2
    xcatliu  
       2014-11-02 15:32:32 +08:00
    一般就用 chrome 的 develop tools 吧,可以设置断点看变量值是什么。
    涉及 ajax 的看看 network。
    puras
        3
    puras  
       2014-11-02 15:40:36 +08:00
    调JS一直用FireFox中的FireBug,可以断点调试,也可以直接使用console.log打印变量。。。
    还可查看好多东西,如LS所说的Network等
    arslion
        4
    arslion  
       2014-11-02 15:44:32 +08:00
    我比较粗暴, 直接console.log哈哈
    NemoAlex
        5
    NemoAlex  
       2014-11-02 15:55:49 +08:00
    alert 出来是 undefined,就是 undefined 咯
    ibigbug
        6
    ibigbug  
       2014-11-02 16:17:10 +08:00
    看 network
    如果嫌 alert 麻烦的话直接用 chrome 在 source 里面打断点
    lincanbin
        7
    lincanbin  
       2014-11-02 16:46:08 +08:00
    ajax的回调里是一个匿名函数,表面看起来你这个回调函数可能包在另一个函数里,但是实际上是异步执行,已经是另一个函数了,这个回调里能使用的变量,只有全局变量。
    直接在回调函数里调用包着Ajax的那个函数里的变量是最常见的JavaScript作用域错误。
    cdxem713
        8
    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
        9
    cdxem713  
       2014-11-02 19:00:16 +08:00
    @lincanbin 唯一会出现问题的只有settimeout和setinterval,这两个的回调函数的外部应该是全局那个域。
    具体的没有描述清楚,可以写个东西试试。
    zhouzm
        10
    zhouzm  
       2014-11-02 20:16:17 +08:00
    变量定义全加上 var ,基本上大部分变量作用域的问题就清除了,剩下的再利用 develop tools 断点调试吧
    domino
        11
    domino  
       2014-11-02 22:14:29 +08:00
    chrome console
    shuson
        12
    shuson  
       2014-11-03 09:18:20 +08:00
    除了source里断点和network直接找request,response,还有其他好办法么?
    不喜欢console.log打乱代码
    zhhc
        13
    zhhc  
       2014-11-03 10:40:30 +08:00
    chrome 的console,network,beakpoints
    jprovim
        14
    jprovim  
       2014-11-03 14:16:01 +08:00
    chrome做調試, 直接console.log. 與其debug不如花點時間去理解下JavaScript裡面的closure.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5365 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 09:14 · PVG 17:14 · LAX 01:14 · JFK 04:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.