JS 包装类

发布于 2023-05-10 15:17:27 字数 1128 浏览 66 评论 0

声明一点:JavaScript 的原始值是没有任何的属性和方法的

那么问题来了

var str = 'abc'
console.log(str.length) // 3

刚不是才说,原始值没有属性和方法吗?那为什么能访问到 length 属性呢?

// console.log(str.length) 经历了什么过程呢?
// 1. 使用 new String(str) ,实例化一个 String 对象;(假设为 obj)
// 2. 这个实例化对象 obj 下面有个 length 属性,然后 obj.length 就能获取到对应的属性值 3;
// 3. 接着马上销毁 delete obj.length。

再来

var str = 'abc'
str.len = 1
console.log(str.len) // undefined

// 相当于
var str = 'abc'
new String(str).len = 1
console.log(new String(str).len)
  • 在第二行的 str.len = 1 里面,虽然给 String 的实例化对象的 len 属性赋值 1,但由于没有保存起来,所以,接着系统会马上给销毁掉 delete new String(str).len
  • 第三行里面,又是一个新的实例化对象,而该实例化对象里面并没有 len 属性(或方法),所以输出的是 undefined

所以呢,我们常见的 string.length 并不是我们表面看到的 string 变量有一个 length 属性,它没有。

原始值是不可能有属性和方法的,但 str.len = 1 不报错,为什么呢?因为经历了一个包装类。BooleanStringNumber 的原始值都可以加属性和方法,因为有包装类,但是 Null 和 Undefined 加属性和方法会报错(例外)。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

独木成林

暂无简介

文章
评论
26 人气
更多

推荐作者

动次打次papapa

文章 0 评论 0

我是有多爱你

文章 0 评论 0

linces

文章 0 评论 0

玍銹的英雄夢

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文