面试准备
-
实现左中右三栏布局,左右固定宽度,中间自适应
- 浮动—float
- 定位—position
- 弹性盒子布局—flex
- 表格布局—table
-
var、 let、 const的区别
var会声明一个全局变量,编译过程中会存在变量提升,var可以重复声明同一个变量。
let和const不存在变量提升,会产生暂时性死区,在每个代码块中同一个变量只能声明一次。
const只能声明一个常量。区别:
- 变量提升
- 暂时性死区
- 块级作用域
- 重复声明
- 修改声明的变量
-
this指向问题
var length = 10; function fn (){ console.log( this ); return this.length + 1; } var obj = { length : 5, test1: function() { console.log(this) return fn(); } }; obj.test2 = fn; console.log(obj.test1()) console.log(obj.test2()) console.log(fn() === obj.test2())
-
怎么判断一个空对象
* for ... in ...
* Object.keys()
* JSON.stringfy()
- == 与 === 区别
- ===:严格相等
- ==:宽松相等
NAN不等于NAN
==在比较两个不同的类型的值的时候会发生隐式强制转换,会将 其中的一或两个值变为同一种类型而进行比较
在 == 中null和undefined相等,他们自身也与其自身相等,除此之外其他值都不和他们想等
在操作符中,==,排序运算符,加减乘除,在对非原始值进行操作时,都会调用内部的toPrimitive()方法
如果{}既可以被认为是代码块,又可以被认为是对象字面量,那么js会把他当做代码块来看待。
所以 [] + {} = [object Object] ,
{}+[] = 代码块 + [] = + [] = 0 调用toNumber方法。
ToPrimitive中的valueOf()方法返回里面的值进行比较
toPrimitive(input,preferedType?)
input是输入的值,preferedType是期望转换的类型,他可以是字符串,也可以是数字。
如果转换的类型是number,会执行以下步骤:
1. 如果input是原始值,直接返回这个值;
2. 否则,如果input是对象,调用input.valueOf(),如果结果是原始值,返回结果;
3. 否则,调用input.toString()。如果结果是原始值,返回结果;
4. 否则,抛出错误。
5. 如果转换的类型是String,2和3会交换执行,即先执行toString()方法。
6. 你也可以省略preferedType,此时,日期会被认为是字符串,而其他的值会被当做Number。
- 箭头函数和普通函数
- 箭头函数是匿名函数,不能作为构造函数,不能使用new
- 箭头函数不绑定arguments,取而代之用rest参数…解决