我见过几个在文件开头有这种语法的JavaScript库。这个语句意味着什么,运行此语句后getClass的值是什么,为什么需要它?另外,分号开头的目的是什么?
;(function (window) {
// Convenience aliases.
var getClass = {}.toString, isProperty, forEach, undef;
// remaining function goes here
}
答案 0 :(得分:2)
运行此语句后getClass的值是什么
与{}.toString
相同。
为什么需要这个?
不是。评论说这是一个方便的别名。
另外,分号开头的目的是什么?
因此,如果脚本与另一个脚本连接在一起,并且前一个脚本在最后一个语句之后未能包含;
,则不会导致错误。
答案 1 :(得分:2)
在ECMAScript 5中,对象具有内部[[Class]]属性,根据8.6.2,只能通过Object.prototype.toString
访问:
[[Class]]内部属性的值在内部使用 区分不同种类的物体。注意这个规范 没有为程序提供任何访问该值的方法,除非 通过
Object.prototype.toString
(see 15.2.4.2)。
而{}.toString
是Object.prototype.toString
的快捷方式。
例如,getClass
可用于测试对象是否为Arguments object:
getClass.call(obj) === "[object Arguments]"