Есть ли & ldquo; null coalescing & rdquo; оператор в JavaScript?

При попытке решения @Mahomedalid и @Junaid я обнаружил проблему. Так подумал об обмене. Если имя столбца имеет пробелы или дефисы, такие как регистрация, запрос будет терпеть неудачу. Простым обходным решением является использование обратных ссылок вокруг имен столбцов. Измененный запрос ниже

SET @SQL = CONCAT('SELECT ', (SELECT GROUP_CONCAT(CONCAT("`", COLUMN_NAME, "`")) FROM
INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'users' AND COLUMN_NAME NOT IN ('id')), ' FROM users');
PREPARE stmt1 FROM @SQL;
EXECUTE stmt1;
1196
задан user2864740 22 February 2014 в 09:24
поделиться

6 ответов

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"
1924
ответ дан Ates Goral 22 February 2014 в 09:24
поделиться

Если ||, поскольку замена C# ?? не достаточно хороша в Вашем случае, потому что это глотает пустые строки и нули, можно всегда писать собственную функцию:

 function $N(value, ifnull) {
    if (value === null || value === undefined)
      return ifnull;
    return value;
 }

 var whatIWant = $N(someString, 'Cookies!');
43
ответ дан sth 22 February 2014 в 09:24
поделиться
  • 1
    @Flexo: Сообщение отредактировало, чтобы отразить, что и поощряют принятие другого ответа. –  6 July 2013 в 17:31

остерегайтесь JavaScript определенного определения пустого указателя. существует два определения для "никакого значения" в JavaScript. 1. Пустой указатель: когда переменная является пустой, это означает, что это не содержит данных в нем, но переменная уже определяется в коде. как это:

var myEmptyValue = 1;
myEmptyValue = null;
if ( myEmptyValue === null ) { window.alert('it is null'); }
// alerts

в таком случае, типом Вашей переменной является на самом деле Объект. протестируйте его.

window.alert(typeof myEmptyValue); // prints Object
  1. Неопределенный: когда переменная не была определена, прежде в коде, и как ожидалось, она не содержит значения. как это:

    if ( myUndefinedValue === undefined ) { window.alert('it is undefined'); }
    // alerts
    

, если такой случай, тип Вашей переменной 'не определен'.

уведомление, что при использовании преобразовывающего тип оператора сравнения (==) JavaScript будет действовать одинаково обоих из этих пустых значений. для различения их всегда используйте строгий типом оператор сравнения (===).

4
ответ дан sshow 22 February 2014 в 09:24
поделиться
  • 1
    +1 - Это также зависит от способа, которым это выполняется, Т.Е. Вы can' t объявляют, поскольку #!/bin/bash тогда вызывают с sh Или объявляют как #!/bin/sh и вызывают с bash, по крайней мере, на Debian 7 Вы будете видеть ошибку на обоих. Объявление должно соответствовать вызову. – webLacky3rdClass 13 December 2013 в 19:03

После чтения Вашего разъяснения, @Ates ответ Goral обеспечивает, как выполнить ту же операцию, которую Вы делаете в C# в JavaScript.

ответ @Gumbo обеспечивает лучший способ проверить на пустой указатель; однако, важно отметить различие в == по сравнению с === в JavaScript особенно когда дело доходит до проблем проверки undefined и/или null.

существует действительно хорошая статья о различии в двух условиях здесь . В основном поймите, что, если Вы используете == вместо ===, JavaScript попытается объединить значения, которые Вы сравниваете и возвращаете что результат сравнения после эта коалесценция.

3
ответ дан Tom 22 February 2014 в 09:24
поделиться

JS получает пустой оператор объединения теперь! В настоящее время на Этапе 3, перемещающемся в Этап 4, yay! https://пример github.com/tc39/proposal-nullish-coalescing

в предложении:

const response = {
  settings: {
    nullValue: null,
    height: 400,
    animationDuration: 0,
    headerText: '',
    showSplashScreen: false
  }
};

const undefinedValue = response.settings.undefinedValue ?? 'some other default'; // result: 'some other default'
const nullValue = response.settings.nullValue ?? 'some other default'; // result: 'some other default'
const headerText = response.settings.headerText ?? 'Hello, world!'; // result: ''
const animationDuration = response.settings.animationDuration ?? 300; // result: 0
const showSplashScreen = response.settings.showSplashScreen ?? true; // result: false
0
ответ дан Jacob 29 August 2019 в 16:06
поделиться

Обратите внимание, что Передействие create-react-app набор инструментальных средств поддерживает объединение пустого указателя с тех пор версия 3.3.0 (выпустил 12.05.2019) . Из информации о версии:

Дополнительное Объединение в цепочку и Nullish Объединение Операторов

Мы теперь поддерживаем дополнительное объединение в цепочку и nullish объединение операторов!

// Optional chaining
a?.(); // undefined if `a` is null/undefined
b?.c; // undefined if `b` is null/undefined

// Nullish coalescing
undefined ?? 'some other default'; // result: 'some other default'
null ?? 'some other default'; // result: 'some other default'
'' ?? 'some other default'; // result: ''
0 ?? 300; // result: 0
false ?? true; // result: false

С учетом вышесказанного, в случае, если Вы используете create-react-app 3.3.0 +, можно начать использовать пустой указатель - объединяют оператор уже сегодня в Вашем Реагировать приложения.

1
ответ дан 19 December 2019 в 20:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: