Если у меня есть этот JavaScript
var someVar = someOtherVar == null;
Какие значения someOtherVar
приведут к истинности someVar
?
Примечание. Из того, что я прочитал, если someOtherVar
равен undefined
, то someVar
будет верным. Но я много изменяю свой код, чтобы использовать этот стиль сравнения, и я хочу быть уверен, что больше ничего не приведет к выражению правдивости (кроме null
и {{X4} } ) .
2 ответа
Какие значения
someOtherVar
приведут кsomeVar
бытьtrue
?
Только null
и undefined
.
Алгоритм в спецификации относительно прост а> :
- Если
Type(x)
совпадает сType(y)
, тогда верните результат выполнения Сравнение строгого равенстваx === y
.- Если
x
равен нулю , аy
неопределен , верните true .- Если
x
равен undefined , аy
равен нулю , верните true .- Если
Type(x)
равен Number, аType(y)
- String, вернуть результат сравненияx == ToNumber(y)
.- Если
Type(x)
- это строка, аType(y)
- это число, вернуть результат сравненияToNumber(x) == y
.- Если
Type(x)
- логическое значение, вернуть результат сравненияToNumber(x) == y
.- Если
Type(y)
- логическое значение, вернуть результат сравненияx == ToNumber(y)
.- Если
Type(x)
является либо строкой, числом или символом, аType(y)
является объектом, вернуть результат сравненияx == ToPrimitive(y)
.- Если
Type(x)
является объектом, аType(y)
является либо строкой, числом или символом, вернуть результат сравненияToPrimitive(x) == y
.- Вернуть false .
Шаг 1 обрабатывает случай null == null
. Шаг 2 и 3 обрабатывают случаи null == undefined
и undefined == null
. Шаги 6 и 7 обрабатывают случаи, когда другое значение является логическим, поэтому в итоге вы сравниваете число с null
. Поскольку null
не является объектом, числом, строкой, логическим значением или символом, не применяются другие этапы, поэтому возвращается false
(шаг 10).
Какие принуждения от нулевого сравнения в JavaScript?
Только если другое значение является логическим , оно будет приведено к числу , поэтому вы в конечном итоге сравниваете 0 == null
или 1 == null
, оба которые false
.
Во всем остальном случае приведения типов не происходит (ничто не приведено к null
, а null
не приведено к какому-либо другому типу данных).
Выглядит только null
и undefined
:
const arr = ['string', true, false, 0, null, undefined, NaN, {}, [], 4, -1, -0];
const r = arr.map((e,i) => {
return { i, e, bool: e == null }
}).filter(e => e.bool);
// return elements which result in 'null'
// i: index inside initial array 'arr'
console.log(JSON.stringify(r, null, 2));
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.