JS面试题

134 阅读2分钟

一元运算符+

把操作数转化为数字类型,是最快的。

10+'15' = '1015'
10++'15' = 25

shift() 与pop()

shift删除第一项并返回,pop删除最后一项

JS删除数组中某个元素

nums.splice(start,length,(newItem1,newItem2...))
delete nums[i]

var let const

let没有变量提升 --暂时性死区(TDZ)必须等let语句执行完后才能使用变量,否则报错

let不绑定全局对象

let重复声明报错

const必须初始化

function 的「创建」「初始化」和「赋值」都被提升了

apply call bind

都是用于改变this指向

apply(obj,[params])->可以直接给数组

call的参数直接逗号隔开 call(obj,param1,param2....)

bind返回一个新函数,需要重新执行,其余都和call一样

不传obj则为window

转型函数

Boolean() String() Number() Bigint() Symbol()

Boolean()Number()String()
nullfalse0"null"
undefinedfalseNaN"undefined"

Object(value)

如果value是null或undefined,返回空对象

如果value是原始类型,返回构造出的包装类型的对象

var s = Object('abc')
console.log(s instanceof String)//true

如果value是引用类型,不变

typeof instanceof

typeof 判断数据类型 但只能返回八种类型(数组会返回Object)

instanceof判断是否是某对象的实例

判断是否是数组

a instanceof(Array)
a.cosntructor === Array
都是通过访问原型链来判断
Array.isArray(a)
原理:
Object.prototype.toString.call(a) === [Object Array]

new 做了什么?

新建对象

改变原型指向

以新建对象为this调用构造函数

js事件三个过程

捕获过程:从window开始向下

目标过程:

冒泡过程:从目标开始向上

addEventListener默认冒泡,第三个参数设为true即可变为捕获

event.preventDefault() 阻止默认行为

event.stopPropagation()阻止捕获和冒泡阶段进一步传播

jsDOM对象

&,!,|,&&,!!,||

&,| 位运算

!转为布尔 !100 ==false

!!用于判断非空则true