栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么不能在javascript中将属性添加到字符串对象?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么不能在javascript中将属性添加到字符串对象?

Javascript有6种语言类型:

  • 5种原始类型: 字符串数字布尔值空值未定义
  • 1个非基本类型: 对象

基本类型的值称为基本值,并且它们不能具有属性。
所述的值 对象 非原始型被称为对象的它们可具有的特性。

当您尝试将名为的属性分配给

'bar'
变量时
foo
,如下所示:

foo.bar = 'abc';

那么结果将取决于以下值的类型

foo

(a) 如果的值属于 UndefinedNull

foo
类型,则将引发错误, ____

(b) 如果的值属于 Object

foo
类型,则将在对象上定义一个命名属性(如果需要),并将其值设置为,
__
'bar'``foo``'abc'

(c) 如果的值

foo
NumberStringBoolean
类型,则该变量
foo
将不会以任何方式更改。在这种情况下,上述分配操作将为noop。

因此,如您所见,仅在变量是对象的情况下,才将属性分配给变量。如果不是这种情况,则分配将根本不执行任何操作,甚至抛出错误。


在您的情况下,该变量

test
包含 String 类型的值,因此:

test.test = "test inner";

什么也没做。


但是,由于ES5引入了访问器属性,所以我上面已经说过了。访问器属性使我们可以定义在检索或设置属性时将调用的函数。

例如:

var str = '';str.prop;

str
是一个保存 字符串值的变量。因此,访问该变量的属性应该是no-op(
str.prop
仅返回
undefined
)。唯一的例外是这样:如果
String.prototype
包含
'prop'
具有定义的getter的accessor属性,则将调用该getter。

因此,如果已定义:

Object.defineProperty( String.prototype, 'prop', {    get: function () {        // this function is the getter    }});

然后这个

str.prop;

将调用该getter函数。

但是,我认为向内置原型添加访问器属性不是一个好习惯。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/614668.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号