2014-12-08 3 views
4

в PHP:Проверьте, если строка ноль, ноль, пустая строка, пустой

$var=0; 
$var=""; 
$var="0"; 
$var=NULL; 

, чтобы проверить, если $ УАК 0 или "0" или "" или NULL

if (!$var) {...} 

в JQuery/JavaScript:

$var=0; 
$var=""; 
$var="0"; 
$var=NULL; 

if (!$var) работы для каждого значения за исключением "0"

Есть ли общий способ в JavaScript/jQuery для проверки всех видов пустых/нулевых/нулевых значений, точно так же, как php?

+0

Не полагайтесь на это заблуждение отливок типа. Используйте явные строгие проверки с помощью '==='. – dfsq

+0

Что делать, если строка не пуста, но имеет только пробелы? Если вы включите их, вы можете преобразовать значение в число. Все это закончится как '0' ...' if (+ my_var === 0) {' –

+0

Если это действительно ваш случай, почему бы вам просто не проверить значение'! Value || value == '0''? – andlrc

ответ

5

Есть ли общий способ JavaScript/jQuery для проверки всех видов пустых/нулевых/нулевых значений, точно так же, как это делает php?

№ п. В PHP значения, преобразованные в булевы, дают разные результаты, чем в JavaScript. Таким образом, вы не можете это сделать ровно, как это делает PHP.

Почему бы не быть (немного больше) явно об этом, что делает ваш код более понятным?

// falsy value (null, undefined, 0, "", false, NaN) OR "0" 
if (!val || val === '0') { } 
+0

Сначала я ответил '! + V', но это ненадежно наоборот: [example] (http://jsbin.com/kedija/2/edit?js,console,output) –

+0

О, хорошо! Благодаря! –

+0

Felix: на основе вашего ответа: function is_empty (myvar) {var res = false; if (! myvar || myvar === '0') res = true; return res; } – ihtus

4

Абстрактная операция ToBoolean преобразует свой аргумент в значение типа Boolean согласно таблице 11:

Неопределенного ложного
Null ложных
Логического Результата совпадает с входным аргументом (без преобразования).
Номер Результат ложный, если аргумент равен +0, -0 или NaN; иначе результат будет правдой.
String Результат ложный, если аргумент пустой String (его длина равна нулю);
в противном случае результат верен.
Объект истинный

0 вернет ложь.

http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf

+0

спасибо, я заметил это, но я ищу общий способ проверить его в JS, как это делает php. – ihtus

+1

так, как вы это делали в php. –

+0

Мне это нужно в JS ... – ihtus

0

Вы можете очень хорошо использовать двойной отрицательный.

var test = 0; 
console.log(!!test); 

var test = ""; 
console.log(!!test); 

var test = "0"; 
console.log(!!test); 

var test = null; 
console.log(!!test); 

Хотя "0" не пустая строка, так что истинно, остальное возвращают ложь.

Кроме того, я согласен с комментарием, что dfsq сделал то, что вы не должны полагаться на это. Вы должны знать и понимать, какие типы хранят ваши переменные.

0

Первый из «0» не является ложным, его правда. Потому что '0' - это строка. Строки, если они существуют, возвращают true. Так что ! "" Должен возвращать false. При этом, если данные возвращаются нули как строки вы можете использовать:

parseInt("0", 10); 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt

Это возвращает целое значение или NaN. ! NaN вернет true, и если это число сказать ... 0, он вернется!0, так что вы можете сделать это:

function nullOrEmpty(value) { 
    return (!value && !parseInt(value)); 
} 
+0

'parseInt' не' Parse.Int' – andlrc

+0

Действительно, спасибо. Как выглядит один отзыв? – CarbonDonuts

+0

* «Строки, если они существуют, возвращают true. Поэтому!» «Должно возвращать false». * Это неверно. '!" "' возвращает 'true'. –

1

Если вы чувствуете фанки (только в вашем точном прецедентного образца), вы можете сделать это:
(иначе undefined и NaN приведет, как false)

+v===0 

Пример:

var a = [0, "", "0", null]; 
var b = [1, "a", "1", {}]; 

a.forEach(function(v){ 
    console.log(+v===0); // true, true, true, true 
}); 

b.forEach(function(v){ 
    console.log(+v===0); // false, false, false, false 
}); 
0

Количество (переменная), кажется, производят ожидаемой выходной

Number(0) = 0 
Number("0") = 0 
Number("") = 0 
Number(null) = 0 
Number(false) = 0 
Смежные вопросы