JS混淆基本类型和原理
JavaScript中的基本类型和它们的包装对象是密切相关的。基本类型有undefined
、null
、boolean
、number
、string
和symbol
,它们不是对象,不具有属性和方法。但是,当JavaScript需要为这些基本类型添加属性或方法时,它会创建一个临时的包装对象。
例如,当你给一个字符串变量添加属性时,实际上是在创建一个String对象的实例,并在操作完成后销毁它。
let str = "Hello";
str.prop = "World";
console.log(str.prop); // undefined
在上面的代码中,我们尝试给字符串str
添加一个属性prop
,但是当我们尝试访问这个属性时,它并没有被保存下来,而是返回了undefined
。这是因为每次只在需要时创建包装对象,执行操作,然后销毁它。
如果你需要一个可以持久保存属性的对象,你可以显式地创建一个对象。
let str = "Hello";
let strObj = new String(str);
strObj.prop = "World";
console.log(strObj.prop); // World
在这个例子中,我们创建了一个String对象strObj
,并给它添加了一个属性prop
。这个属性会一直存在,直到我们明确地删除它。
这种行为对于基本类型是有意为的,因为它允许我们为简单的数据类型添加功能,而不需要他们自己的实际对象表示形式。这也是为什么在JavaScript中有时被称为基本值和包装对象的原因。
评论已关闭