Javascript 从什么时候开始null.toString()返回[object null]?
我很好奇,因为我认为Javascript 从什么时候开始null.toString()返回[object null]?,javascript,Javascript,我很好奇,因为我认为 Object.prototype.toString.call(null) 返回[object object],但现在我在Chrome和FF中检查了它,并且都返回了[object Null]。现在的问题是,我是否可以假设Object.prototype.toString总是告诉我好的类型 到目前为止,我一直在用这个方法检查每一种类型,但不是空值,而是通过 obj === null; 谢谢 需要说明的是:这个“问题”并不严重,因为我正在使用atm function isN
Object.prototype.toString.call(null)
返回[object object]
,但现在我在Chrome和FF中检查了它,并且都返回了[object Null]
。现在的问题是,我是否可以假设Object.prototype.toString总是告诉我好的类型
到目前为止,我一直在用这个方法检查每一种类型,但不是空值,而是通过
obj === null;
谢谢
需要说明的是:这个“问题”并不严重,因为我正在使用atm
function isNull(obj) {
return obj === null;
}
function isUndefined(obj) {
return typeof obj === 'undefined';
}
这很好,但如果Object.prototype.toString.call()
在较旧的浏览器中足够工作,我可以放弃这两个函数,并使用null
和未定义的
扩展我的解决方案,如:
var types=['Object','Number','String','Array','Function',
'Date','RegExp','Boolean','Error','Null','Undefined'].reduce(函数(prev,类型){
prev['[object'+type+']']=type.toLowerCase();
返回上一个;
}, {});
函数isType(类型){
返回函数(obj){
返回getType(obj)==type;
};
}
函数getType(obj){
返回类型[Object.prototype.toString.call(obj)];
}
var isNull=isType('null');
document.querySelector('#console').textContent=isNull(null)代码>
定义如下:
调用toString
方法时,将执行以下步骤:
如果此
值为未定义
,则返回“[对象未定义]”
如果此
值为空
,则返回“[对象空]”
将O
作为调用ToObject
的结果,并将此
值作为参数传递
让class
成为[[class]]
内部属性O
的值
返回串接三个字符串的结果字符串值“[对象”
,类
,和“]”
对它的定义不同:
调用toString
方法时,将执行以下步骤:
将O
作为调用ToObject
的结果,并将此
值作为参数传递
让class
成为[[class]]
内部属性O
的值
返回串接三个字符串的结果字符串值“[对象”
,类
,和“]”
Oriol的答案是正确的,但我想补充一点,直接对一个数字或字符串调用toString
,与使用Object.prototype.toString
是有区别的
Object.prototype.toString
函数是通用函数,因此如果我们这样做
var x = "hello, world";
alert(Object.prototype.toString.call(x));
我们将看到“[对象字符串]”
但是,如果我们直接调用toString,则如下所示:
alert(x.toString());
我们将看到“你好,世界”。原因是第二个示例中的toString
实际上是String.prototype.toString
,这与一般的对象.prototype.toString
方法不同。类似于6的数字也有相同的区别:
var y = 6;
alert(Object.prototype.toString.call(y)); // "[Object Number]"
alert(y.toString()); // "6"
alert(Number.prototype.toString.call(y)); // also "6"
在这种情况下,执行y.toString()
时,原语值6被装箱到Number
的实例中。连接字符串时,调用的是对象的toString
方法,而不是object.prototype.toString
,这就是警报(“我”+y+“岁”)
生成“我6岁”,而不是“我[对象编号]岁”的原因
因为null
没有null
原型或类似的东西,所以执行null.toString()
会产生错误。为什么需要检查每种类型?下面是FF:从JavaScript 1.8.5开始调用null返回[object null],未定义返回[object undefined]…
@AmadeusDrZaius如果你读了文档就没那么奇怪了。这里:@AmadeusDrZaius:哪个浏览器(版本)Object.prototype.toString.apply(“hello”)
在Chrome和FF中为我提供了“[对象字符串]”
。谢谢,但最初的问题远不是这个答案,但无论如何,谢谢^^