#javascript
#javascript
Вопрос:
У меня есть приведенный ниже код в моей функции, я хочу присвоить значение переменной newValue .
var newValue = fieldValue || originalValue || masterValue;
Здесь, если у меня есть исходное значение = 0, java-скрипт обрабатывает его как false / null и присваивает masterValue новому значению. Вместо этого я хочу присвоить OriginalValue (0) новому значению.
Есть ли способ добиться этого без дополнительной строки кода?
Комментарии:
1. Вы хотите проверить специально для
null
then, а не просто какое-либо ложное значение?2. На самом деле для обоих значений null и false просто не хочу проверять 0.
3. Тогда нет, нет способа сделать это без дополнительного кода, независимо от того, помещаете ли вы этот код в ту же строку или нет, зависит от вас.
4. Я почти уверен, что это дубликат вопросов
==
vs===
.5. @ssube Вовсе нет,
||
оператор не имеет ничего общего с равенством
Ответ №1:
Да, но это становится немного сложнее (с использованием троичного оператора).
var newValue = fieldValue || (originalValue || originalValue===0) ? originalValue : masterValue;
(это предполагает, что вы хотите, чтобы 0 присваивалось даже при fieldValue
вводе)
Комментарии:
1. Теперь попробуйте выполнить
false || false==0
и посмотрите, что вы получите (подсказка: вам нужно строгое сравнение) ?2. На самом деле нет, только в OriginalValue .
3. обновлено @Y.Solanki ( только для
originalValue
исправления и для комментария @adenao )4. Да, нестрогое сравнение скажет вам, что
false
и0
то же самое, это та же проблема||
.
Ответ №2:
Определите «хорошее» значение с помощью предиката и передайте его Array.find
функции:
var isValid = x => !!x || x === 0;
var newValue = [fieldValue, originalValue, masterValue].find(isValid);
Если вы нацелены на старые MSIES, .find
может быть заменен на .filter(...)[0]
.
var isValid = x => !!x || x === 0;
console.log([1, 2, 3].find(isValid));
console.log([false, 0, 3].find(isValid));
console.log([null, 0, 3].find(isValid));
console.log([undefined, 0, 3].find(isValid));
console.log(["", 0, false].find(isValid));
console.log(["", null, false].find(isValid));
Комментарии:
1. приятно, хотя в комментарии OP упоминается, что 0 должно быть действительным только для
originalValue
переменной, а не для любой из них.
Ответ №3:
Вы захотите использовать
var newValue = fieldValue;
if (newValue == null)
newVAlue = originalValue;
if (newValue == null)
newValue = masterValue;
||
Оператор довольно неаккуратный и его не следует использовать, когда вам нужно иметь дело с ложными значениями.
Ответ №4:
Если вы хотите заставить это работать с одной строкой кода, вот вариант:
var fieldValue = false;
var originalValue = 0;
var masterValue = 5;
var newValue = fieldValue || (originalValue===0)?0:originalValue || masterValue;
console.log(newValue); // newValue=0