JS基本类型与无法定义的属性

在浏览器中,变量一旦声明为基本类型,则再也无法为其添加其他属性,示例如下:

//  变量一旦声明为基本类型,则无法添加属性  
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(),基本类型与否,则决定了以后的操作范围。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值