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中为我提供了
    “[对象字符串]”
    。谢谢,但最初的问题远不是这个答案,但无论如何,谢谢^^