Var a = 0,
b = [] ,
c ={},
d =‘’;
Console.log(!a);
Console.log(!b);
Console.log(!c);
Console.log(!d);
Console.log(a&&b&&c&&d);
Console.log(a||b||c||d);
Console.log(!~b.push(a));
输出结果是?
在firebug里调试为nothing。FirebugJS

解决方案 »

  1.   

    我从不在这个上面浪费时间!~b.push(a)
    我手下写这样的代码 说不出理由我直接抽
      

  2.   

    你以为你是谁? John Resig ?欠抽
      

  3.   

    var a = 0;var b = [];var c ={};var d ='';console.log(!a);console.log(!b);console.log(!c);console.log(!d);console.log(a&&b&&c&&d);console.log(a||b||c||d);console.log(!~b.push(a));
    你写的什么啊
      

  4.   

    !a 等  都把它转换为boolean型了吧
      

  5.   

    你以为你是谁? John Resig ?欠抽
    关键是
    1。别人很难简单的读懂类似的代码(几个月后你自己也看不懂了)
    2。这个代码在不同地方不保证结果相同
    3。我手下不是John Resig 
    所以要抽
      

  6.   

    你以为你是谁? John Resig ?欠抽
    关键是
    1。别人很难简单的读懂类似的代码(几个月后你自己也看不懂了)
    2。这个代码在不同地方不保证结果相同
    3。我手下不是John Resig 
    所以要抽

    KK3K2005不愿意在这个上面浪费时间。
    KK3K2005列举了三条关键理由为什么不愿意在这个上面浪费时间。
    KK3K2005要抽写这样代码的人,前提是他手下。
    得出以下三条结论:
    KK3K2005的时间很宝贵,在不和别人交流代码的情况下(且不论代码好坏)。
    KK3K2005不可能成为John Resig更不要妄想有John Resig 这样的手下。
    KK3K2005其实是一个好的上司,只抽自己手下,猜测是恨铁不成钢。KK3K2005的时间很宝贵,其实我觉得时间不重要,态度最重要。你是老总也好,小兵也罢,技术交流区最主要的还是交流。
    个人欣赏关键三条中第二条那样的态度:2。这个代码在不同地方不保证结果相同。
    随着时间的流逝,代码总能变好、变少。不知道人当怎样。
    此致,无关代码。 
      

  7.   

    你以为你是谁? John Resig ?欠抽
    关键是
    1。别人很难简单的读懂类似的代码(几个月后你自己也看不懂了)
    2。这个代码在不同地方不保证结果相同
    3。我手下不是John Resig 
    所以要抽

    KK3K2005不愿意在这个上面浪费时间。
    KK3K2005列举了三条关键理由为什么不愿意在这个上面浪费时间。
    KK3K2005要抽写这样代码的人,前提是他手下。
    得出以下三条结论:
    KK3K2005的时间很宝贵,在不和别人交流代码的情况下(且不论代码好坏)。
    KK3K2005不可能成为John Resig更不要妄想有John Resig 这样的手下。
    KK3K2005其实是一个好的上司,只抽自己手下,猜测是恨铁不成钢。KK3K2005的时间很宝贵,其实我觉得时间不重要,态度最重要。你是老总也好,小兵也罢,技术交流区最主要的还是交流。
    个人欣赏关键三条中第二条那样的态度:2。这个代码在不同地方不保证结果相同。
    随着时间的流逝,代码总能变好、变少。不知道人当怎样。
    此致,无关代码。 

    哈哈  其实抽之类的是开玩笑 可以忽略
    大家刚开始的成长环境不一样
    所以观点不同把
    我进入这行时一直处于生活压力中 我需要做更多的项目来缓解压力(公司 自己 外包)
    很少有时间给我慢慢的去品味 语言的细节
    我更偏向于  
    了解开发需要语言的基本语法 了解语言能实现的领域
    深入分析项目的需求
    然后用自己很自我的累积的一点点面向对象面向环境面向接口面向流程面向配置的经验
    来实现项目
    并使之容易管理容易维护
    很幸运有搜索的存在和各种前辈的指点我总能侥幸闯过一个个难关
    闯的多了 你会发现 决策怎么实现需求是第一要务
    目前而言 我更关注于怎么成为大脑 而不是别人挑选的武器
    所以不要在太细节的东西上使用时间此致,真无关代码。 
      

  8.   

    !~ 话说这种 处理的确不是正常 的js开发人员的思维....
    以下是在firefox22beta里面测试的结果Console.log(!a); true  因 0==false js就这么规定的...你只能咬他...
    Console.log(!b); false b虽然是一个空的数组,但是它仍然是一个存在的数组,空盘子也是盘子
    Console.log(!c); false 原因同上,是个空的json对象,但是它仍然存在
    Console.log(!d); true  原因同第一个,0== '' ==false 这个跟其它的语言可能不太一样 
    Console.log(a&&b&&c&&d); 0 按理这里应该输出的是个false,不清持为毛显示0,当然如果用if语句判断,这个肯定会走false对应的分支.
    Console.log(a||b||c||d);[] 按理这里应该输出的是个true,不清楚为毛显示[],当然如果用if判断会走true分支.
    Console.log(!~b.push(a));false  b.push(a) 就是给数组b加了一个元素a,但是这个时候用~操作符按位取反,那么数组b将被转换为字符串,执行数组的toStirng方法得到0,按位取反得到-1,  -1被!操作符操作时,被强转为boolean 值是 true,然后执行!操作,结果是false...
    api里面有如下的表述:
    1、所有一元运算符,如 ~ 运算符,以如下规则来求表达式的值: 如果将它用于 undefined 或 null 表达式,则产生一个运行时错误。 
    对象被转换成字符串。 
    如果可能,字符串被转换为数字。如果不能,则产生一个运行时错误。 
    Boolean 值被当作数字(如果是 false 则为 0,如果是 true 则为 1)。 
    2、JScript 使用下面的规则,来把非 Boolean 值转换为 Boolean 值: 所有对象都被认为是 true。 
    字符串当且仅当为空时被认为是 false。 
    null 和 undefined 被认为是 false。 
    数字当且仅当为零时是 false。 
      

  9.   

    Wdbjsh正解,对于测试结果有误的问题解决了我会贴上来。结贴。谢谢wdbjsh详细的解答。
      

  10.   

    var a = 2,b = [],c = {},d = '';
    console.log(a||b||c||d)   测试结果为2
    console.log(a&&b&&c&&d)   测试结果为空串var a =2,b =[];
    console.log(a&&b)    结果是[]
    还测试了其它的不同的语句,其中有一个object {}
    说明这里与和或的并不是布尔值,不等同于一元操作符!。
      

  11.   

    又测试了一下 发现 我想多了&&  和 || 执行的之后返回的不是true false 因为这个语句不会强转变量的类型,它返回的其实是最后一个被执行 true false 判断的变量[] || '1' || 2 || {}   返回 []
    '1' || [] || 2 || {}   返回 '1'
    0 || '' || 2 || {}   返回 ''
    0 || '1' || 2 || {}   返回 '1'
    0 || null || 2 || {}   返回 2[] && '1' && 2 && {} 返回 {}
    [] && '1' && 0 && {} 返回 0
    [] && '' && 2 && {} 返回 ''
      

  12.   


    wdbjsh测试的结果是正确的
    即先判断布尔值  再输出变量
    && 是布尔值为真  则输出 后边的不再判断
    || 是布尔值为假  则输出  后边的不再判断。