Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

神奇的Object.prototype.toString

  我们都知道,在非严格模式下,调用函数时函数内的this永远指向一个对象。即使我们在call时传入的不是一个对象也会被指向global对象。而toString却可以识别null和undefined,也就是说我们调用它时this并没有被转换,难道它是定义在严格模式下吗?
  在现代浏览器上Object.prototype.toString确实是可以识别null和undefined的。

  但是在较低版本的IE上Object.prototype.toString就无法识别它们。
  这个现象很奇怪,如果toString是定义在严格模式中就可以解释这个现象。因为严格模式中的this不会被转换,而且低版本IE没有严格模式。但是再进一步测试就会发现,toString不是定义在严格模式中的,因为我们在外部访问它的arguments属性时并不会抛出异常,要是严格模式定义就会抛出异常(ES5-15.3.5)。

  翻遍ES5也没找到这个东西的定义,内置方法究竟是如何接收传入的this的呢?
  这真不知道,也许我得去ES6里翻翻看。但是我觉得Object.prototype.toString的行为是不明确的,不能指望它做类型判断之类的事情,至少它在IE8-上的结果是和其它浏览器不同的。
网名:
3.84.186.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^