JavaScript---a++、++a、

205 阅读3分钟

装箱、拆箱

装箱:把基本数据类型转化为对应的引用数据类型的操作

var num = 123 // number

var objNum = new Number(123) // Object

拆箱:将引用类型对象转换为对应的值类型对象 valueOf()

var objNum = new Number(123)

console.log(typeof objNum.valueOf()) // 123 number

装箱、拆箱的原理

调用 JS的 toPrimitive(input,type)方法 input:传入的值 type:值类型

// 1.input 判断是不是原始类型的值,是,直接返回

// 2.不是 调用input.valueOf() 是 原始类型 直接返回

// 3. 还不是:调用input.toSting() string 是 原始类型 返回

// 4.报错

// valueOf():input 原始类型的值,有:返回,没有:返回对象本身

// toString():input 字符串转换;对象:[object type] type:对象类型

面试题

console.log([] + []) // ‘’

//解析:

console.log([].valueOf()) // []

console.log([].toString()) // ''

console.log([] + {}) // [object,object]

a++(后缀自增)与++a(前缀自增)的区别

  • a++:如果a的初始值是1,则a++会返回1,后a变为2
    • 执行时机:首先返回变量a的值,后将a的值增加1
    • 返回值:返回a自增前的原始值
  • ++a:如果a的初始值是1,则++a会先增加到2,然后返回2
    • 执行时机:先将变量a的值增加1
    • 返回值:返回a增加后的新值
var a = 1
console.log(a++) // 1
console.log(a)//2

var b = 1
console.log(++b)//2
console.log(b)//2

显式、隐式类型转换区别

  • 显式类型转换:通过代码明确地使用一些函数或操作符将一个数据类型转换为另一个数据类型
let num = 43
let str = String(num)
  • 隐式类型转换:操作过程中自动发生的,根据规则自动执行类型转换。
let num = 43
let str = num + ""

创建对象的方式

  • 使用对象字面量方式{}创建
var obj = {a:1,b:2}
  • object构造函数
const obj = new Object()
obj.name = '加油'
  • 函数模拟class类
// 无参构造函数
function obj (){
  this.name = '加油'
}
const obj = new Obj()
console.log(obj.name) // 加油
// 有参构造函数
function Obj (name,age){
  this.name = name
  this.age = age
}
const obj = new Obj('加油',12)
console.log(obj.name) // 加油
  • 使用对象原型的关键字创建
function Obj (){}
Obj.prototype,name  = '加油'
const obj = new Obj()
console.log(obj.name) //加油

创建函数的方式

  • 声明式函数
function add(num1,num2){
   return num1 + num2
}
  • 函数表达式:将函数作为一个值赋给一个变量或属性
const add(num1,num2) =>(num1 + num2)
  • 构造函数
const add = new Function('num1','num2','return num1 + num2')

数组

改变数组本身

  • pop和push尾部删除添加
const arr = [1,2,3,4]
arr.push(5) // [1,2,3,4,5]
arr.pop() //[1,2,3,4]  //再次调用,就会删除最后一位
  • unshift和shift头部删除添加
const arr = [1,2,3,4]
arr.unshift(5) // [5,1,2,3,4]
arr.shift() //[1,2,3,4]  //再次调用,就会删除第一位
  • sort排序
const arr = [1,2,3,4]
arr.sort(()=>)

  • reverse反转
const arr = [,2,3,4]
arr.reverse()
cosnole.log(arr) //[4,3,2,1]
  • splice 截取新增数据(可以选择删除数组中的某一个值,也可以在数组中的某个位置添加一些数据)

不改变数组本身

  • filter数据过滤
  • map
  • reduce
  • slice 数组截取
  • concat 数组合并

类数组,转换为真正的数组

类数组:类似于数组的对象,具有数组的一些特征,例如:数字索引,length属性。但不是真正的数组,缺少数组的方法和属性。

类数组转换为真正的数组的方法

  • 使用Array.from()方法可以 从类数组对象或可迭代对象创建一个新的数组。它将类数组的值复制到一个新的数组中,并返回这个新数组
  • 使用Array.prototype.slice.call()
  • 使用扩展运算符
  • 使用concat()方法
const nodeList = document.querySelectorAll("p")
const nodeListArray = Array.form(nodeList)
const nodeListArray = Array.prototype.slice.call(nodeList)
const nodeListArray = [...nodeList]
const nodeListArray = [].concat(nodeList)