设为首页 加入收藏

TOP

为什么JavaScript中的基本类型能调用方法?
2015-11-10 13:45:48 来源: 作者: 【 】 浏览:5
Tags:为什么 JavaScript 基本 类型 调用 方法

我们从一道笔试题说起:


输出啥?要理解这个问题,我们得从头说起。


java script 数据类型分两大类,基本类型(或者说是原始类型)和引用类型。基本类型的值是保存在栈内存中的简单数据段,共有五种,按值访问,分别是 undefined null boolean number 和 string;而引用类型的值则是保存在堆内存中的对象,按引用访问,主要有 Object Array Function RegExp Date等。


我们再来回头看这道笔试题,很显然变量 str 是一个基本类型,str.pro 看上去是给 str 添加了一个属性,等等,我们似乎只有在当 str 是一个对象时才看到过这样的用法,似乎也已经习惯给对象添加 key-value 键值对,但是基本类型也行么?


这个问题先放一边,我们回到标题中的问题:


str 变量并没有 length 属性,不是说好了只有对象才能用 . 或者 [] 去访问属性值吗? 这里我们要引入一个叫做 基本包装类型 的概念。除了 Object Array 等引用类型外,其实还有三种特殊的引用类型 String Number 和 Boolean,方便我们操作与其对应的基本类型,而它们就是基本包装类型。str 作为一个基本类型是没有 length 属性的,但是它的基本包装类型 String 有啊,其实在执行 console.log(str.length) 这段代码时,事情的经过是这样的:


所以获取字符串变量 str 的长度的代码,内部实现大概是这个样子的:


那么我们再回到文章开头的例子,也就不难理解了。当执行 str.pro = 'hello' 时,实际上内部创建了一个基本包装类型的实例,然后给这个实例的 pro 属性赋值为 hello,实例创建后马上销毁了,当下一次试图获取 str.pro 的值时,又会创建一个基本包装类型的实例,显然新创建的实例时没有 pro 属性的,为 undefined,所以最后输出 undefinedworld 。而下面的代码也是一样的道理:


有了这个包装器对象的概念,操作数字字符串就方便多了!


最后引用一段《java script启示录》中的话:


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇jQuery获得下拉列表选中值和文本 下一篇二叉树三种遍历的递归和迭代解法

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: