Есть ли в Javascript нулевой оператор слияния?
Например, в C # я могу сделать это:
String someString = null;
var whatIWant = someString ?? "Cookies!";
Лучшее приближение, которое я могу выяснить для Javascript, это использовать условный оператор:
var someString = null;
var whatIWant = someString ? someString : 'Cookies!';
Что-то вроде ИМХО. Могу ли я сделать лучше?
JavaScript, эквивалентный из пустого оператора (??
) объединения C#, использует логическое ИЛИ (||
):
var whatIWant = someString || "Cookies!";
существуют случаи (разъясненный ниже), что поведение не будет соответствовать поведению C#, но это - общий, краткий способ присвоить значения по умолчанию/альтернативные в JavaScript.
<час> Независимо от типа первого операнда, при кастинге его к булевской переменной приводит к false
, присвоение будет использовать второй операнд. Остерегайтесь всех случаев ниже:
alert(Boolean(null)); // false
alert(Boolean(undefined)); // false
alert(Boolean(0)); // false
alert(Boolean("")); // false
alert(Boolean("false")); // true -- gotcha! :)
Это означает:
var whatIWant = null || new ShinyObject(); // is a new shiny object
var whatIWant = undefined || "well defined"; // is "well defined"
var whatIWant = 0 || 42; // is 42
var whatIWant = "" || "a million bucks"; // is "a million bucks"
var whatIWant = "false" || "no way"; // is "false"
Если ||
, поскольку замена C# ??
не достаточно хороша в Вашем случае, потому что это глотает пустые строки и нули, можно всегда писать собственную функцию:
function $N(value, ifnull) {
if (value === null || value === undefined)
return ifnull;
return value;
}
var whatIWant = $N(someString, 'Cookies!');
false
если (строго) пустой/неопределенный и true
иначе - использование это с логическим или; это могло быть более читаемо, чем много вызовов вложенных функций. например, $N(a) || $N(b) || $N(c) || d
более читаемо, чем $N($N($N(a, b), c), d)
.
– Bob
13.05.2020, 02:34
После чтения Вашего разъяснения, @Ates ответ Goral обеспечивает, как выполнить ту же операцию, которую Вы делаете в C# в JavaScript.
ответ @Gumbo обеспечивает лучший способ проверить на пустой указатель; однако, важно отметить различие в ==
по сравнению с ===
в JavaScript особенно когда дело доходит до проблем проверки undefined
и/или null
.
существует действительно хорошая статья о различии в двух условиях здесь . В основном поймите, что, если Вы используете ==
вместо ===
, JavaScript попытается объединить значения, которые Вы сравниваете и возвращаете что результат сравнения после эта коалесценция.
остерегайтесь JavaScript определенного определения пустого указателя. существует два определения для "никакого значения" в JavaScript. 1. Пустой указатель: когда переменная является пустой, это означает, что это не содержит данных в нем, но переменная уже определяется в коде. как это:
var myEmptyValue = 1;
myEmptyValue = null;
if ( myEmptyValue === null ) { window.alert('it is null'); }
// alerts
в таком случае, типом Вашей переменной является на самом деле Объект. протестируйте его.
window.alert(typeof myEmptyValue); // prints Object
Неопределенный: когда переменная не была определена, прежде в коде, и как ожидалось, она не содержит значения. как это:
if ( myUndefinedValue === undefined ) { window.alert('it is undefined'); }
// alerts
, если такой случай, тип Вашей переменной 'не определен'.
уведомление, что при использовании преобразовывающего тип оператора сравнения (==) JavaScript будет действовать одинаково обоих из этих пустых значений. для различения их всегда используйте строгий типом оператор сравнения (===).
#!/bin/bash
тогда вызывают с sh
Или объявляют как #!/bin/sh
и вызывают с bash
, по крайней мере, на Debian 7 Вы будете видеть ошибку на обоих. Объявление должно соответствовать вызову.
– webLacky3rdClass
13.12.2013, 21:03
||
возвраты первый " truey" значение или последний " falsey" один (если ни один не может оценить к истинному), и что&&
работы противоположным способом: возврат последнего значения truey или первого falsey один. – Justin Johnson 13.05.2020, 02:37