在浏览器中,变量一旦声明为基本类型,则再也无法为其添加其他属性,示例如下:
// 变量一旦声明为基本类型,则无法添加属性
var username = 'yiifaa'
username.from = 'china'
// 输出为undefined
console.log(username.from)
改为严格模式,再测试如上代码:
"use strict";
var username = 'yiifaa'
username.from = 'china'
console.log(username.from)
执行上面的代码,则直接提示如下错误:
Uncaught TypeError: Cannot create property 'from' on string 'yiifaa' at 1.html:21
可见,基本类型无法添加属性,切换为Object.defineProperty方式,依旧提示错误:
var username = 'yiifaa'
Object.defineProperty(username, 'from', {
value : 'china'
})
console.log(username.from)
错误信息如下:
Uncaught TypeError: Object.defineProperty called on non-object
at Function.defineProperty (<anonymous>)
at 1.html:17
很明确的错误提示信息,无法为非对象类型定义属性。
如果,确实要为String添加自定义属性,则需要修改声明方式,如下:
var username = new String('yiifaa')
// 输出为object
console.log(typeof username)
现在username变量已支持自定义属性的添加了。
结论
不同的变量声明方式会导致变量具有不同的特性,如String()与new String()、Boolean()与new Boolean(),基本类型与否,则决定了以后的操作范围。