下层基础决定上层建筑筑基篇4-包装类
在 JavaScript 中,包装类是将基本数据类型(如字符串、数字、布尔值等)包装成对象的一种机制。
对包装类总是有一层迷雾一样,似懂非懂,那就让我们一起来揭开这层迷雾吧
包装类常见的只有三种:
String():将基本数据类型字符串包装成字符串对象。Number():将基本数据类型数字包装成数字对象。Boolean():将基本数据类型布尔值包装成布尔对象。
案例一
var mrpeng = {
name : 'x',
age : 18,
sex : '男',
smoke : function() {
console.log('I am a smoke');
this.age--;
}
}
var a = 'like'
mrpeng[a] = '宋轶' //这个a是一个变量,得去全局作用域找到a的值,否则将会报错
mrpeng['a'] = '李沁' //'a'是一个字符串,就是key
mrpeng.smoke();
console.log(mrpeng);
//打印结果
{
name: 'x',
age: 17,
sex: '男',
drink: [Function: drink],
smoke: [Function: smoke],
like: '宋轶',
a: '李沁'
}
个人疑惑 this.age-- ===>>> age--
结果是如何,是否依旧会减1
报错,原因是未找到age
虽然你定义了 age 作为对象的属性,但是在 smoke 函数内部直接使用 age 时,它被视为一个在该函数作用域内未定义的变量,会去上一级作用域即全局作用域找,而不是去查找对象上的 age 属性。要解决这个问题,需要明确地通过 mrpeng.ageValue 或者this.age这样的方式来访问对象的属性。
案例二
var str = 'hrllo' ; //系统会默认这样执行 new String('hrllo')
var obj = {}; //创建对象字面量
function Car (color){
this.name = '坦克500'
this.height = 1407
this.lang = 50000
this.weight = 1000
this.color = this.color
//系统内部运行的执行原理,每个对象都是独一无二,
所以一个实例对象数据改变另一个不会跟着改变
// var this = {
// name : '坦克500',
// height : 1407,
// lang : 50000,
// weight: 1000 ,
// color : this.color,
// }
// return this;
}
let car = new Car('black')
let car1 = new Car('white')
console.log(car)
console.log(car1)
案例三
//原始值是不能拥有属性和方法的,属性和方法只有对象才能拥有
//数字的包装类
var num = 123 //new Number(4)系统会自动执行这个操作
num.a = 'aaa' //new Number(4).a = aaa
//然后系统会自动判断是不是new出来的构造函数
//不是的话将执行 delete num.len
console.log(num.a) //所以打印undefined
//Number()
var num = new Number(123)
console.log(num*2); //执行运算时会自动拆包 123*2=246
num.a = 'aaa'
//然后系统会自动判断是不是new出来的构造函数
//是的话将不做任何执行
console.log(num1.a); //aaa
//字符串的包装类
var str = 'asdfsaf'
//lenth是自带的一种方法
console.log(str.length); //7
案例四
//阿里面试题
var str = 'abc'
str +=1 //自动拆包 str = 'abc'+1 ===>>> 'abc1'
var test = typeof(str) //判断str的类型,string
if (test.length == 6){
test.sign = 'typeOf的返回结果可能是String'
}
console.log(test.sign); //undefined ,if执行了为什么还是undefined,了解前面就明白了