日期:2014-05-16 浏览次数:20388 次
alert({}&&10); alert(12&&{});
------解决方案--------------------
再转个
1、 &&
如果将逻辑与运算符用在判断真假,与其他强类型语言是没什么不同的。JS的&&运算符在返回值上值得注意。
第一个操作数为假或可以转换为假时,表达式返回第一个操作数的值,而不是返回false。
第一个操作数为真或可以转换为真时,返回第二个操作数的值。
var i = 0;
var x = (i++ && false);
alert(x);
alert(typeof x);
// 0
// 'number'
2、 ||
同样,逻辑或在返回值上也与其他强类型语言不同。
第一个操作数为真或可以转换为真时,表达式返回第一个操作数的值,而不是返回 true。
第一个操作数为假或可以转换为假时,表达式返回第二个操作数的值,而不论第二个操作数经过转换后是不是为假。
------解决方案--------------------
真是不错
------解决方案--------------------
IE6下window.navigator.plugins.length为0
所以说了。 JS里的比较是返回运算的值 2个true返回的是true
但是你那个不是2个true 是2个值。。
要得到TRUE必须用 !!转换过.
------解决方案--------------------
如果推演是这样的话,的确是对的。
经过阅读1楼的和自己测试,发现“所以在boolean运算中会转换成true”这句话有问题,
的确在JS中的bool运算中它不是返回true 或者false ,如果是&&运算的话,它是找到第一个可以确定这个运算结果的对象,并且返回这个对象。同样的或运算也是,返回第一个可以确定运算结果的对象。
学习了
------解决方案--------------------
alert(Boolean(window.navigator.plugins));
所以 true && true
如果你用BOOLEAN转过了. 那就是TRUE了.
没转过就返回运算结果(对象)
------解决方案--------------------
http://www.laone.net/post/2011/01/14/201101141214334760.aspx
------解决方案--------------------
LZ大概是没理解JS的某些特性(虽然我也不是很清楚)
不过JS在处理非BOOL型的比较时,返回的是比较运算里的结果。
var hasplugins = window.navigator.plugins && window.navigator.plugins.length;
首先这句我还想说一点。window.navigator.plugins.length在不同浏览器下是不一样的。
然后来说JS下的 &&运算.
在遇到运算结果为FLASH为止,都会一直处理下去,直到为FALSE或到最后.
则 1&&2&&3 结果为3 1&&0&&2 结果为0
然后是||运算
直到最后或者有一个为TRUE为止. 返回那个结果
则 0||0||1 结果为1 0||2||3 结果为2.
如果你需要得到BOOL型 可以用2个 !! 来强转 alert(!!0);