下层基础决定上层建筑筑基篇4-包装类

91 阅读2分钟

下层基础决定上层建筑筑基篇4-包装类

在 JavaScript 中,包装类是将基本数据类型(如字符串、数字、布尔值等)包装成对象的一种机制。

对包装类总是有一层迷雾一样,似懂非懂,那就让我们一起来揭开这层迷雾吧

包装类常见的只有三种:

  1. String():将基本数据类型字符串包装成字符串对象。
  2. Number():将基本数据类型数字包装成数字对象。
  3. 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,了解前面就明白了