При попытке решения @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;
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!');
остерегайтесь 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 December 2013 в 19:03
После чтения Вашего разъяснения, @Ates ответ Goral обеспечивает, как выполнить ту же операцию, которую Вы делаете в C# в JavaScript.
ответ @Gumbo обеспечивает лучший способ проверить на пустой указатель; однако, важно отметить различие в ==
по сравнению с ===
в JavaScript особенно когда дело доходит до проблем проверки undefined
и/или null
.
существует действительно хорошая статья о различии в двух условиях здесь . В основном поймите, что, если Вы используете ==
вместо ===
, JavaScript попытается объединить значения, которые Вы сравниваете и возвращаете что результат сравнения после эта коалесценция.
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
Обратите внимание, что Передействие 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 +, можно начать использовать пустой указатель - объединяют оператор уже сегодня в Вашем Реагировать приложения.