2011-03-30 2 views
2

я получаю следующий яваскрипт ошибку:Javascript NULL Значение

'value' is null or not an object 

Может кто-то пожалуйста, дайте мне знать, что это лучший способ, чтобы проверить, является ли значение объекта в JavaScript NULL, как я использовал:

if ((pNonUserID !== "") || (pExtUserID !== "")){ 

Правильно это или есть лучший способ?

Спасибо.

+0

Вашего кода тестирование на пустую строку, а не 'null'. Если 'pNonUserID = null;', то выражение будет оцениваться как 'true'. Но я думаю, что сообщение об ошибке не связано с кодом, который вы опубликовали. Ошибка в другом месте. –

+0

См. Http://stackoverflow.com/questions/801032/null-object-in-javascript для получения дополнительной информации –

+0

Феликс прав. Хуже того, вы используете идентичный оператор, который проверяет как значение, так и тип. Если вы использовали '! =', Он бы сработал (поскольку он проверяет значение и 'null ==" "'). См. Мой ответ для получения дополнительной информации. – Christian

ответ

12

Вы не должны делать это:

var n=null; 

if(n)alert('Not null.'); // not shown 
if(!n)alert('Is null.'); // popup is shown 

Ваша ошибка означает иначе:

var n=null; 

alert(n.something); // Error: n is null or not an object. 

В приведенном выше случае, следует использовать что-то вроде этого:

if(n)alert(n.something); 
+0

Неверный вывод вашего первого примера кода. 'if (! n) alert ('Is null.');' также будет предупреждать 'Is null ', если' n ==' ''или' n == 0', и в других случаях. –

0
if (pNonUserID && pExtUserID) 
{ 
    // neither pNonUserId nor pExtUserID are null here 
} 

Любая переменная Javascript auto математически оценивает значение true, когда ссылается на объект.

Что вы делаете, это сравнение с пустыми строками, которые не совпадают с нулями.

3

Оператор! == возвращает true, когда две переменные не являются одним и тем же объектом. Он не смотрит на значения объектов на всех

Чтобы проверить, если что-то является недействительным:

myVar == null 

Ваш код был тестирование, чтобы увидеть, если переменная «pNonUserId» называют тот же объект, как " ", которое никогда не может быть истинным, поскольку" "всегда будет новым экземпляром пустой строки.

Как и в сторону, испытание, такие как:

var n = something(); 
// do stuff 
if (n) 
    doSomethingElse(); 

плохая идея. Если n было логическим и ложным, но вы ожидали, что блок if проверит аннулирование, вы попадете в шок.

+0

Я собираюсь прослушивать здесь, с грубой проверкой на нуль. Должно быть понятно (и правильное использование) для проверки на 'var n = null; if (n! == null) {doSomething (n); } ', но, увы, нулевой объект будет хреново оценивать значение false выше. Если было принято решение о создании объекта null, и было решено, что «===» должен проверять как тип, так и значение, тогда приведенный выше должен быть действительным кодом. Сводит меня с ума. – eggmatters

0

null, undefined и empty string рассматривается как false в условном выражении.

так

if(!n) alert("n is null or undefined or empty string"); 
if(n) alert("n has some value"); 

для этого, inflagranti предложили условие будет отлично работать для вас

if(pNonUserID && pExtUserID) { 

} 
Смежные вопросы