2014-06-27 22 views
5

różni się od obj != null;Co robi Object (obj) === obj?

wiem, że obj != null wykryje niczego, co może mieć właściwości na nim jako nieważną i nieokreślone są tylko dwie wartości, które nie mogą mieć właściwości.

Jak to się różni od

Object(obj) === obj;

+0

Wynik nie jest taki sam. Weźmy na przykład prymityw lub string: jest! = Null, ale jego odpowiednik w pudełku nie jest === prymitywną formą. –

Odpowiedz

6

Object(obj) === obj testy czy obj jest obiektem lub prymitywne, w przeciwnym razie również ciągów itd

console.log(Object('foo') === 'foo'); // false 
console.log(Object(true) === true); // false 
console.log(Object(null) === null); // false 

var obj = {}; 
console.log(Object(obj) === obj);  // true 

Jest to przydatne do określenia jeśli wartość można podać i zapamiętać przypisaną właściwość.

Podczas null i undefined wprost błąd podczas próby wykorzystywać właściwości, dlatego obj != null jest nadal przydatny, no primitive values are able to hold onto properties.

var pri = 'foo'; 
pri.foo = 'bar';  // no error, but still... 
console.log(pri.foo); // undefined 

var box = Object(pri); 
box.foo = 'bar'; 
console.log(box.foo); // 'bar' 

referencyjny:

Kiedy obj jest null lub undefined, Object(obj) returns a new Object():

1) Jeśli wartość jest null, undefined lub nie podasz, tworzyć i powrócić nowa Obiekt obiektu jest dokładnie taki, jak standardowy wbudowany konstruktor obiektu ha d został wywołany z tymi samymi argumentami (15.2.2.1).

A pierwotne logicznych, łańcuchy i liczby są zapakowane do ich rodzajów przedmiotów poprzez ToObject(), które nie są równe ich pierwotnych równoważników:

2) Powrót ToObject (wartość).

console.log(typeof 'foo' === 'string');   // true 
console.log(typeof Object('foo') === 'object'); // true 

console.log('foo' instanceof String);   // false 
console.log(Object('foo') instanceof String); // true 
-2

tożsamości (===.! ==)

podmioty te zachowują się identycznie dla operatorów równości wyjątkiem żadna konwersja typu jest zrobione, a typy musi być taki sam, aby być uznanym za równy.

http://www.c-point.com/javascript_tutorial/jsgrpComparison.htm

Nicea Stos Link przelewowy Which equals operator (== vs ===) should be used in JavaScript comparisons?

Nadzieja pomaga

+2

Nie widzę, jak to odpowiada na pytanie. Nie chodzi tylko o! = I! ==, a raczej o 'x!= null' i 'Object (x) === x' –

+0

Pierwsze łącze podaje podstawowe znaczenie operatora JS, a drugie łącze (SO) wyjaśnia znacznie lepiej. Te dwa linki dały mi przekonującą odpowiedź na problem. – Kris

Powiązane problemy