2014-01-22 4 views
0
var _={}; 

_.bullets='1,2,3'; 

console.log(typeof bullets); 

СтрокаJavascript String.split ('') делает объект, когда он должен сделать массив

console.log(_.bullets); 

var bullets=_.bullets.split(','); 

console.log(bullets); //REF 1 

[ "1", "2", "3"]

console.log(typeof bullets); 

объект

Почему это не массив? Я не могу понять, что я делаю неправильно здесь

UPDATE

console.log([1,2,3]); 
console.log(bullets); //REF 1 

[1, 2, 3]

[ "1", "2", «3 «]

Какая разница (одна строка один ряд?)

+0

http://stackoverflow.com/questions/4775722/check-if-object-is-array – Andreas

+1

Разница между [1,2,3] и ["1", "2", "3"] является что один представляет собой массив с 3 номерами, а один - массив с тремя строками. – JLRishe

+2

'typeof [] ===" object "' - единственные объекты, где typeof не дает объект '' ', являются функциями. – Bergi

ответ

2

Использование Array.isArray(a) или a instanceof Array.

Массивы - это объекты, поэтому typeof возвращает object.

3

typeof никогда не возвращается 'array'. Для экземпляров Array, он возвращает 'object':

Таблица 20 - TypeOf Оператор Результаты

  • Undefined: "неопределенными"
  • Null: "объект"
  • булеву: "boolean"
  • Номер: "номер"
  • Строка: "строка"
  • Object (родной и не реализует [[Call]]): "объект"
  • Object (родной или хост и не осуществлять [[ Call]]): «function»
  • Объект (хост и не реализует [[Call]]): Реализованный вариант, за исключением не может быть «undefined», «boolean», «number» или «string ».

Источник: ECMAScript spec

0

typeof возвращает 'объект', когда подается массив значений. Для проверки массива вы можете сделать что-то вроде этого (от JavaScript the Good Parts):

var is_array = function (value) { 
    return value && 
    typeof value === 'object' && 
    typeof value.length === 'number' && 
    typeof value.splice === 'function' && 
    !(value.propertyIsEnumerable('length')); 
}; 
+0

Это называется утиная печать. Если он срастается как утка, это утка. – Tibos

1

Технически typeof подходит для примитивных типов в то время как instanceof подходит для ссылочных типов.

Если вы используете typeof для некоторых ссылочных типов (Array, Object), он вернет "object". Function является третьим ссылочный тип; он ведет себя по-другому (typeof мудрый), поскольку он вернется "function", когда typeof new Function().

Основываясь на вашем примере вы можете сделать вывод, что string является примитивным типом в JavaScript, как typeof "blabla" === string (который возвращает истину). Да, это любопытно, если вы исходите из традиционного строго типизированного языка, такого как Java или C#.

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