在第38页中,我发现-默认情况下,简单地将数组强制转换为字符串 将所有值连在一起,中间用逗号(,)。你可能认为 具有相同内容的两个数组将==相等,但是 他们不是:
var a = [1,2,3];
var b = [1,2,3];
var c = "1,2,3";
a == c; // true
b == c; // true
a == b; // false
但是当我运行如下代码时:
var a = [1,2,3];
var b = [1,2,3];
var c = "1,2,3";
console.log(typeof a == c); // false
console.log(typeof b == c); // false
console.log(typeof a == b); // false
我得到了不同的答案!为什么在这里typeof a == c和typeof b == c是假的?
答案 0 :(得分:2)
正在做
typeof a == c
=> (typeof a) == c
=> "object" == c // which is false
基本上typeof
运算符在==
符号之前起作用
我的陈词滥调建议,请始终使用括号来清楚表达您的意图
typeof (a==b)
与(typeof a) == b
答案 1 :(得分:0)
typeof
运算符以字符串形式返回变量内容的类型。因此,如果变量a
包含数组,则typeof a
将返回字符串"object"
(因为数组是一种特殊的对象)。
因此typeof a == c
和typeof b == c
将字符串"object"
与字符串"1,2,3"
进行比较。由于它们显然不相同,因此返回false。
请注意,typeof
运算符的优先级高于==
运算符。