javascript string.split(',')在它应该创建数组时创建对象

时间:2014-01-22 14:59:43

标签: javascript arrays string object

var _={};

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

console.log(typeof bullets);

的字符串

console.log(_.bullets);

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

console.log(bullets);    //REF 1

[“1”,“2”,“3”]

console.log(typeof bullets);

对象

为什么不是阵列?我无法弄清楚我在这里做错了什么

更新

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

[1,2,3]

[“1”,“2”,“3”]

有什么区别(一个是字符串1是数字?)

4 个答案:

答案 0 :(得分:3)

typeof永远不会返回'array'。对于Array的实例,它会返回'object'

表20 - 运营商结果类型

  • 未定义:“未定义”
  • Null:“object”
  • 布尔值:“布尔”
  • 数字:“数字”
  • 字符串:“string”
  • 对象(原生且未实现[[Call]]):“object”
  • 对象(本机或主机并实现[[Call]]):“function”
  • 对象(主机并没有实现[[Call]]):实现定义,但可能不是“未定义”,“布尔”,“数字”或“字符串”。

来源:ECMAScript spec

答案 1 :(得分:2)

使用Array.isArray(a)a instanceof Array

数组是对象,因此typeof会返回object

答案 2 :(得分:1)

技术上typeof适合原始类型,而instanceof适合引用类型

如果您对某些引用类型( Array,Object )使用typeof,它将返回"object"Function是第三个引用类型;它的行为有所不同(typeof明智),因为它会在"function"时返回typeof new Function()

根据您的示例,您可以在JavaScript中将string 原始类型推断为typeof "blabla" === string(返回true)。是的,如果你来自传统的强类型语言,如Java或C#,那就好奇了。

答案 3 :(得分:0)

typeof在提供的数组值时返回'object'。要测试数组,您可以执行以下操作(来自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'));
};