Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
内置JavaScript函数toString的文档在哪里?_Javascript - Fatal编程技术网

内置JavaScript函数toString的文档在哪里?

内置JavaScript函数toString的文档在哪里?,javascript,Javascript,我查看了jQuery代码,发现isArray是使用内置函数toString实现的。我在MDC上找不到此函数的文档。这个文件存在吗?这个函数做什么 isArray: function( obj ) { return toString.call(obj) === "[object Array]"; }, 我查看了jQuery代码,发现isArray是使用内置函数toString实现的 它不是一个内置的。见第68行: toString = Object.p

我查看了jQuery代码,发现isArray是使用内置函数toString实现的。我在MDC上找不到此函数的文档。这个文件存在吗?这个函数做什么

isArray: function( obj ) {
             return toString.call(obj) === "[object Array]";
         },
我查看了jQuery代码,发现isArray是使用内置函数toString实现的

它不是一个内置的。见第68行:

toString = Object.prototype.toString,
jQuery正在自己的名为
toString
的变量下对
Object
上的
toString
方法进行复制。
Object#toString
方法在MDC(以及ECMAScript本身)中有文档记录。然后,jQuery使用
call
调用方法的变量副本,并将对象作为
this
传入。此迂回调用方法不允许创建重写
toString()
的对象,并且可能返回字符串
“[object Array]”

(特别是,字符串
'[object Array]'
本身将
[object Array]
作为其
toString()
值,因此如果直接调用
obj.toString()
,将被错误地检测为数组。调用
object
toString()
的基本实现可以避免这种情况。)

测试
toString()
表示非常难看(对于主机对象,仍然不是100%),但是更直接的
obj instanceof Array
不适用于跨窗口脚本,因为
Array
在每个窗口/帧中都是不同的构造函数

ECMAScript第五版添加了函数
Array.isArray(obj)
,以避免这种不愉快。然而,浏览器支持目前很差

我查看了jQuery代码,发现isArray是使用内置函数toString实现的

它不是一个内置的。见第68行:

toString = Object.prototype.toString,
jQuery正在自己的名为
toString
的变量下对
Object
上的
toString
方法进行复制。
Object#toString
方法在MDC(以及ECMAScript本身)中有文档记录。然后,jQuery使用
call
调用方法的变量副本,并将对象作为
this
传入。此迂回调用方法不允许创建重写
toString()
的对象,并且可能返回字符串
“[object Array]”

(特别是,字符串
'[object Array]'
本身将
[object Array]
作为其
toString()
值,因此如果直接调用
obj.toString()
,将被错误地检测为数组。调用
object
toString()
的基本实现可以避免这种情况。)

测试
toString()
表示非常难看(对于主机对象,仍然不是100%),但是更直接的
obj instanceof Array
不适用于跨窗口脚本,因为
Array
在每个窗口/帧中都是不同的构造函数


ECMAScript第五版添加了函数
Array.isArray(obj)
,以避免这种不愉快。但是,浏览器支持目前很差。

In将内部对象状态转换为其字符串表示形式。In将内部对象状态转换为其字符串表示形式。我明白了。你的解释说明得很清楚。当我说toString是内置的时,我的意思是它是由浏览器本机实现的,因为调用Object.prototype.toString.toSource()告诉您它是本机实现的。剩下的唯一问题是:为什么对象的方法可以从全局范围访问?例如,在Firebug中,以下返回true:toString===Object.prototype.toString这是一个稍微不同的问题:因为在浏览器中,
window
被ECMAScript描述为“全局对象”,所以
window
的所有成员都可以作为全局变量访问。这就是为什么您可以直接调用例如
setTimeout()
以及
window.setTimeout()
Window
是一种
对象
,因此碰巧
对象
的方法也将被公开。但不能保证
toString===Object.prototype.toString
;它适合我在Opera、Safari和Chrome中使用,但不是IE或Firefox 3.6。如果在
obj
不是
窗口
实例时说
toString.call(obj)
,可能会出现错误。附带问题:在Firefox中,对我来说,
toString==window.toString
。这与神秘而混乱的内外窗世界有关 — . 它不适用于其他
窗口
属性。b仔细查看:在调用
toString
函数的闭包中,有一个赋值语句:
toString=Object.prototype.toString
toString函数具有内置的
Object.prototype.toString
的值。作为旁注,这在Blackberry浏览器中引发了一个bug,这里解释道:如果不使用与Object.prototype属性冲突的东西命名标识符,这个问题是可以避免的,例如var
\u toString=Object.prototype.toString
@Garrett:是的,这是我在回答中说的第一句话!(是的,令人遗憾的是,令人震惊的黑莓范围漏洞仍未修复。)我明白了。你的解释说明得很清楚。当我说toString是内置的时,我的意思是它是由浏览器本机实现的,因为调用Object.prototype.toString.toSource()告诉您它是本机实现的。剩下的唯一问题是:为什么对象的方法可以从全局范围访问?例如,以下内容在Firebug中返回true:toString==Object.prototype.toString这是一个稍微不同的问题:因为在浏览器
窗口中
是ECMAScript描述为