Вы не знаете JS: Up & Going - пример проблемы - PullRequest
0 голосов
/ 11 октября 2018

На странице 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 голосов
/ 11 октября 2018

Оператор typeof возвращает тип содержимого переменной в виде строки.Поэтому, если ваша переменная a содержит массив, typeof a вернет строку "object" (так как массивы являются особым видом объектов).

Так что typeof a == c и typeof b == c сравните строку "object" со строкой "1,2,3".Поскольку они явно не совпадают, это возвращает false.

Обратите внимание, что оператор typeof имеет более высокий приоритет, чем оператор ==.

0 голосов
/ 11 октября 2018

делает

typeof a == c

 => (typeof a) == c

 => "object" == c // which is false

в основном typeof оператор работает до == знак


Мой совет клише, всегда используйте парантез, чтобы прояснить свои намерения

typeof (a==b) против (typeof a) == b

...