JS面试

188 阅读2分钟

===,==,Object.is()的不同

== 只比较值 如果类型不同,先转换类型再比较值

=== 既比较类型 又比较值 如果类型不同就会直接返回false

Object.is()是es6新增的方法,他与===大致相同,但是NAN=另一个NAN,Object.is()区分+0和-0

H5新特性

新增语义化标签

新媒体元素:新增标签 audio(音频) video(视频)source(多媒体资源)

新增input类型 email url date time month week number tel search color

新增表单属性 placeholder mutiple canvas新元素

BFC

块级格式化上下文 他是页面中一个独立的容器 容器中的元素不会影响到外面的元素

触发条件 根元素 即html 浮动元素 float 值为left right 重绘:改变元素的外观属性 如color backgroud-color

重排(回流):元素的规模尺寸,布局,隐藏改变时

null和undefined的区别

数据类型不一样,null的数据类型是对象,undefined的数据类型是undefined

null和undefined两者相等 但是当做全等比较时,两者不等

null代表空 代表空指针。undefined 是定义了没有赋值

事件委托

事件委托也叫事件代理,“事件代理”即是把原本需要绑定在子元素的响应事件(click、keydown…)委托给父元素,让父元素担当事件监听的职务。事件代理的原理是DOM元素的事件冒泡。

事件委托的优点

  1. 可以大量节省内存占用,减少事件注册,比如在ul上代理所有li的click事件。
  2. 可以实现当新增子对象时无需再次对其绑定(动态绑定事件)

常用的dom操作方法

map方法会改变原数组吗

不会改变原数组 会返回一个新数组

ES6 解构赋值怎么修改名字?

++在前和++在后的区别

...是浅拷贝还是深拷贝

浅拷贝

浅拷贝和深拷贝的区别和原理

基本数据类型和复杂数据类型的区别

字符串数组互相转化

字符串转数组 str.split('') Object.values(str) Array.from(str) [...str]

数组转字符串 arr.toString() arr.toLocaleString() join('=')

for of 和for in的区别

for in 得到对象的key 或者数组的下标 或字符串的下标

for of 是得到值 for of 不能用于对象

const obj = {
    a: 1,
    b: 2,
    c: 3
}
for (let i in obj) {
    console.log(i)    //输出 : a   b  c
}
for (let i of obj) {
    console.log(i)    //输出: Uncaught TypeError: obj is not iterable 报错了
}
 const arr = ['a', 'b', 'c']
   // for in 循环
   for (let i in arr) {
       console.log(i)         //输出  0  1  2
   }
   
   // for of
   for (let i of arr) {
       console.log(i)         //输出  a   b   c
   }