2015-05-15 9 views
8

Widziałem ten idiom pokazać się w różnych projektach open-source:Czy typofika JavaScript kiedykolwiek zwróciła "tablicę"?

it instanceof Array || typeof it == "array" 

wiem, że druga połowa nie może być prawdą w ECMAScript 5 (lub 6), ale jest/był tam kiedykolwiek implementacja że zwraca "tablicę" z typeof? A może jest to przypadek fałszywego programowania obronnego?

+5

skończyłeś poważnie zobacz to w prawdziwym kodzie? Proszę pokazać link ... – Xufox

+2

Powiedziałbym raczej niewiedzę niż obronę. Ignorancja nie jest przestępstwem, nie jest znana, twórcy, którzy napisali, nie wiedzą, że to nie ma sensu. –

+1

Myślę, że w "dojo" było więcej przypadków, ale widzę tylko jedno: [_firebug/firebug.js: 1036] (https://github.com/dojo/dojo/blob/d7a7e0c997b847debabfc59476c2a4cb0c23d1aa/_firebug/firebug. js # L1036) –

Odpowiedz

5

Nie, przynajmniej od pierwszej wersji ECMAScript.

ECMAScript 1 (czerwiec 1997)

11.4.3 - Operator typeof

Wytwarzanie UnaryExpression: typeofUnaryExpression jest oceniano w sposób następujący:

  1. Ocena UnaryExpression.
  2. Jeśli Typ (Wynik (1)) to Odniesienie i GetBase (Wynik (1)) to null, return "undefined".
  3. Call GetValue (Wynik (1)).
  4. Powrót ciąg zależy od typu (Wynik (3)), zgodnie z poniższą tabelą:

    • Undefined: "undefined"
    • Null: "object"
    • Boolean: "boolean"
    • Numer: "number"
    • Ciąg: "string"
    • Obiekt (natywny i nie implementuje [[połączeń]]) "object"
    • obiektu (naturalnych i przyrządy [[połączeń]]) "function"
    • obiektu (host) zależne od implementacji

ECMAScript 2 (sierpień 1998)

Bez zmian.

ECMAScript 3 (grudzień 1999)

Brak istotnych zmian.

11.4.3 - typeof operatora

Wytwarzanie UnaryExpression: typeofUnaryExpression jest oceniano w sposób następujący:

  1. ocenić UnaryExpression.
  2. Jeśli Type (Wynik (1)) nie jest mowa, przejdź do kroku 4.
  3. Jeśli GetBase (Wynik (1)) jest zerowy, powrót "undefined".
  4. Call GetValue (Wynik (1)).
  5. Powrót ciąg zależy od typu (Wynik (4)), zgodnie z poniższą tabelą:

    • Undefined: "undefined"
    • Null: "object"
    • Boolean: "boolean"
    • Numer: "number"
    • Ciąg: "string"
    • Obiekt (natywny i nie implementuje [[połączeń]]) "object"
    • obiektu (naturalnych i przyrządy [[połączeń]]) "function"
    • obiektu (host) zależne od implementacji

ECMAScript 4

Ta specyfikacja została porzucona.

0

Właśnie przez wzgląd na ukończeniu, te są często stosowane metody, aby sprawdzić tablice:

var arr = [1, 2, 3]; 

arr instanceof Array 
arr.constructor === Array 

Lub w przypadku, gdy chcesz sprawdzić obiekt-PROPERTY:

var obj = { 
    name: "myObject", 
    list: [ 

    ] 
}; 
Powiązane problemy