先不要在计算机上测试var hasplugins = window.navigator.plugins && window.navigator.plugins.length;window.navigator.plugins的运算结果是一个非空的object
window.navigator.plugins.length的运算结果是一个大于0的值解法:
因为window.navigator.plugins非空,所以在boolean运算中会转换成true
window.navigator.plugins.length大于0的值,在boolean运算中会转换成true
所以结果是 true && true 结果为true.请问大家上面的说法是否正确?推演的运算结果是否正确??
window.navigator.plugins.length的运算结果是一个大于0的值解法:
因为window.navigator.plugins非空,所以在boolean运算中会转换成true
window.navigator.plugins.length大于0的值,在boolean运算中会转换成true
所以结果是 true && true 结果为true.请问大家上面的说法是否正确?推演的运算结果是否正确??
不过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);
alert({}&&10);
alert(12&&{});
1、 && 如果将逻辑与运算符用在判断真假,与其他强类型语言是没什么不同的。JS的&&运算符在返回值上值得注意。 第一个操作数为假或可以转换为假时,表达式返回第一个操作数的值,而不是返回false。 第一个操作数为真或可以转换为真时,返回第二个操作数的值。 var i = 0;
var x = (i++ && false);
alert(x);
alert(typeof x);
// 0
// 'number'
2、 || 同样,逻辑或在返回值上也与其他强类型语言不同。 第一个操作数为真或可以转换为真时,表达式返回第一个操作数的值,而不是返回 true。 第一个操作数为假或可以转换为假时,表达式返回第二个操作数的值,而不论第二个操作数经过转换后是不是为假。
引用你的话:
window.navigator.plugins.length在不同浏览器下是不一样的
你说的是对的,我知道在不同的浏览器中返回结果不一样,我忘了说,这里我们就当做这个
window.navigator.plugins.length返回固定的大于0的值,好吗?我的问题是,你是否同意上面的推演,如果不同意,请你说出一些有说服力的证明!!
所以说了。 JS里的比较是返回运算的值 2个true返回的是true
但是你那个不是2个true 是2个值。。
要得到TRUE必须用 !!转换过.
经过阅读1楼的和自己测试,发现“所以在boolean运算中会转换成true”这句话有问题,
的确在JS中的bool运算中它不是返回true 或者false ,如果是&&运算的话,它是找到第一个可以确定这个运算结果的对象,并且返回这个对象。同样的或运算也是,返回第一个可以确定运算结果的对象。
学习了
引用你的话:
与其他强类型语言是没什么不同的
这个肯定是不对的,至少在.net中,bool运算的结果不可能返回一个Object类型感谢你的第一个举例,一开始没有开明白,后来就想通了。
(0 && false),0转换为false,所以返回第一个操作数 0另外,这个例子似乎和我上面的有些出入,不能说明我上面的问题.你看你是否同意上面的推演,如果不同意,请你说出一些有说服力的证明!!
呵,哥们,我说了假设window.navigator.plugins.length返回大于0的值,实际上在非IE中这个值都是大于0的大于0的值是不是会转换成true?
看这个var a = 1;
if (a)
alert("true");
else
alert("false");
这个肯定是true
alert(Boolean(window.navigator.plugins));所以 true && true
没转过就返回运算结果(对象)
不过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);