js数据类型、内置对象以及装箱拆箱操作

数据类型

  • 基本类型
    Number,String,Boolean,Null,Undefined,Symbol、
    访问:基本数据类型的值是按值访问的。
    存储:基本类型的变量是存放在栈内存(Stack)里的。
  • 引用类型: Object
    访问:引用类型的值是按引用访问的。
    存储:引用类型的值是保存在堆内存(Heap)中的对象(Object)
    • typeof: 经常用来检测一个变量是不是最基本的数据类型
    • instanceof: 用来判断某个构造函数的 prototype 属性所指向的对象是否存在于另外一个要检测对象的原型链上。
      简单说就是判断一个引用类型的变量具体是不是某种类型的对象

内置对象

内置对象:
Object是 JavaScript 中所有对象的父对象 数据封装类对象:Object、Array、Boolean、Number 和 String 其他对象:Function、Math、Date、RegExp、Error。
特殊的基本包装类型(String、Number、Boolean)
arguments: 只存在于函数内部的一个类数组对象

装箱和拆箱

引用类型有个特殊的基本包装类型,它包括String、Number和Boolean。

作为字符串的a可以调用方法

装箱:

把基本数据类型转化为对应的引用数据类型的操作**,装箱分为隐式装箱和显示装箱

在《javascript高级程序设计》中有这样一句话:
每当读取一个基本类型的时候,后台就会创建一个对应的基本包装类型对象,从而让我们能够调用一些方法来操作这些数据。(隐式装箱)

隐式装箱

	let a = 'sun'
	let b = a.indexof('s') // 0 // 返回下标
	// 上面代码在后台实际的步骤为:
	let a = new String('sun')
	let b = a.indexof('s')
    a = null
	

在上面的代码中,a是基本类型,它不是对象,不应该具有方法,js内部进行了一些列处理(装箱), 使得它能够调用方法。在这个基本类型上调用方法,其实是在这个基本类型对象上调用方法。这个基本类型的对象是临时的,它只存在于方法调用那一行代码执行的瞬间,执行方法后立刻被销毁。实现机制:

  • 创建String类型的一个实例;
  • 在实例上调用指定的方法;
  • 销毁这个实例;

显示装箱
通过内置对象可以对Boolean、Object、String等可以对基本类型显示装箱

let a = new String('sun	')

拆箱:

拆箱和装箱相反,就是把引用类型转化为基本类型的数据,通常通过引用类型的valueof()和toString()方法实现

	let name = new String('sun')
	let age = new Number(24)
	console.log(typeof name) // object
	console.log(typeof age) //  object
	// 拆箱操作
	console.log(typeof age.valueOf()); // number // 24  基本的数字类型
	console.log(typeof name.valueOf()); // string  // 'sun' 基本的字符类型
	console.log(typeof age.toString()); // string  // '24' 基本的字符类型
	console.log(typeof name.toString()); // string  // 'sun' 基本的字符类型

你可能感兴趣的:(前端知识自检)