javascript相关

JS数据类型

原始类型:boolean、string、number、undefined、symbol、bigint、null
引用类型:对象Object(object、array、regexp、date、math、function)

null是对象吗?为啥?

不是,这是js存在的一个悠久bug,在js最初使用的32位系统,000开头代表对象,而null表示全0

说下var、let、const

先说下var对缺点,再来扩展let、const解决的痛点

  • var会存在变量提升,从而导致了很多与直觉不符的代码

变量提升所带来的问题

  1. 变量容易在不被察觉的情况下被覆盖掉
  2. 本应销毁的变量没有被销毁
0.1+0.2为什么不等于0.3

0.1和0.2转换为二进制都会无限循环,由于标准位数限制后面多余的位数会被截掉,此时就已经了精度损失,相加后因为浮点数的阶段转位十进制就成了0.3000000…4

== 和 === 的区别

== 存在数据类型转换,=== 不仅需要数据类型和值都相等

对象转原始类型

对象在转换类型的时候,会调用内置的 [[ToPrimitive]] 函数,对于该函数来说,算法逻辑一般来说如下:

  • 如果已经是原始类型了,那就不需要转换了
  • 如果需要转字符串类型就调用 x.toString(),转换为基础类型的话就返回转换的值。不是字符串类型的话就先调用 valueOf,结果不是基础类型的话再调用 toString
  • 调用 x.valueOf(),如果转换为基础类型,就返回转换的值
  • 如果都没有返回原始类型,就会报错
let a = {
  valueOf() {
    return 0
  },
  toString() {
    return '1'
  },
  [Symbol.toPrimitive]() {
    return 2
  }
}
1 + a // => 3
Object.is和===的区别?

Object在严格等于的基础上修复了一些特殊情况下的失误,具体来说就是+0和-0,NaN和NaN。源码如下:

function is(x, y) {
  if(x === y){
	//运行到1/x === 1/y的时候x和y都为0,但是1/+0 = +Infinity, 1/-0 = -Infinity, 是不一样的
    return x!==0||y!==0||1/x===1/y;
  } else {
    //NaN===NaN是false,这是不对的,我们在这里做一个拦截,x !== x,那么一定是 NaN, y 同理
    //两个都是NaN的时候返回true
    return x!==x&&y!==y;
  }
}
谈谈你对闭包的理解

红宝书上对于闭包的定义:闭包是指有权访问另外一个函数作用域中的变量的函数

ES5中只存在两种作用域————全局作用域和函数作用域

继承

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

类数组转数组方法

类数组:nodeList、argument。。。

  1. [].slice.call()
  2. […xxx]
  3. Array.from()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值