您不知道JS:向上发展-示例问题

时间:2018-10-11 18:14:48

标签: javascript equality

在第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是假的?

2 个答案:

答案 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 == ctypeof b == c将字符串"object"与字符串"1,2,3"进行比较。由于它们显然不相同,因此返回false。

请注意,typeof运算符的优先级高于==运算符。