原始值本身不是对象,因此逻辑上不应该有方法。
引用类型与原始包装类型的主要区别在于对象的生命周期:
在通过new实例化引用类型后,得到的实例会在离开作用域时被销毁,而自动创建的原始值包装对象则只存在于访问它的那行代码执行期间。这意味着不能在运行时给原始值添加属性和方法。
示例:
<script>
let s1 = "some text";
s1.color="red":
console.log(s1.color);//undefined
</script>
这里的第二行代码尝试给字符串s1添加一个color属性。但是第三行代码访问color属性时,它却不见了,原因在于第二行代码运行时会临时创建一个String对象,而当第三行代码执行时,这个对象已经被销毁了,实际上,第三行代码在这里创建了自己的String对象,但这个对象并没有color属性。
一、new Number()
示例1:
<script>
var num = new Number(123);
console.log(num);
num.a = 473;
console.log(num.a);
console.log(num);
</script>
示例2:
<script>
var num = new Number(123);
console.log(num);
num.a = 473;
console.log(num.a);
console.log(num);
var result = delete num.a;
console.log(result);
//对象是可以参与运算的,但是当对象参与完运算后就不再是对象了
num * 2;
console.log(num);
</script>
二、new String()
<script>
var str = new String("jack");
console.log(str);
</script>
示例2:
<script>
//数组有
var arr = [1, 2, 3, 4];
arr.length = 2;
console.log(arr);
console.log(arr.length);
console.log("-----------------");
var str = 'jack';
str.length = 2;
// new String('jack').length=2; 用完后立即销毁 delete
// new String('jack').length此时已被销毁
console.log(str);
//new String('jack').length
console.log(str.length);
</script>
示例3:
<script>
var str = 'abc';
str += 1;
var test = typeof(str); //typeof(str)-->string
if (test.length == 6) {
test.sign = 'typeof的返回值可能为String';
//new String(test).sign='xxx'; 用完即删除delete
}
//new String(test),sign
console.log(test.sign);
</script>
三、new Boolean()
<script>
var bol = new Boolean(1);
console.log(bol);
</script>
注意:
- undefined以及null没有属性
- 原始值没有属性和方法,但是存在隐式转换,这个过程就是包装类
<script>
var num = 4;
num.len = 3;
//new Number(4).len=3; 用完之后delete(销毁)
//new Number(4).len 此时len已经在上一步就被销毁了
console.log(num.len); //undefined
</script>