体会“一切皆对象”的说法
- 基本类型(可随时像使用对象一样使用它们)
布尔值、数字和字符串等虽然是基本类型,但只要需要,随时都可将它们视为对象,如字符串有一些内置方法,调用这些方法时,JavaScript在幕后将其转化为字符串对象 - 数组(它们有点像对象)
- 函数(它们像对象一样包含属性和方法)
- 构造函数(既像对象又像函数)
- 还有对象本身
- 还有一些内置类型,如Date、Math和RegEx,但它们也都是对象
布尔值、数字和字符串、数组…一切皆对象。它们之所以看起来不同,只是因为JavaScript提供了一些出色的“语法糖”,让我们能够更轻松地创建和访问对象。
就连函数也是对象
下面的代码验证了“函数也是对象”:
function func(){console.log("Everything is an object");)
console.log(func instanceof Object);
输出true,说明函数也是一个Object对象实例
函数确实是对象,现在看来这没什么奇怪的:
- 我们可以将函数赋给变量(就像将对象赋给变量一样),将其作为实参传递给函数(就像对象一样),从函数返回它们(就像对象一样)。
- 函数甚至包含属性,如构造函数的
constructor
属性等 - 另外,完全可以给函数添加新属性——如果这样做有所帮助的话
整合统一
从很大程度上说,JavaScript的威力和灵活性都要归功于可以将函数和对象作为一等值使用
想想我们学习过的知识(构造函数、创建可重用和扩展的对象、参数化函数的行为、闭包等),你就会发现,它们的强大威力都取决于对高级对象和函数的认识