JS中的面试题
https://juejin.im/post/5d0644976fb9a07ed064b0ca#heading-18
变量提升
1.变量的赋值可以分为三个阶段:
创建变量,在内存中开辟空间
初始化变量,将变量初始化为undefined
真正赋值
2.关于let、var和function:
- let 的「创建」过程被提升了,但是初始化没有提升。使用let(和const)关键字声明的变量是具有块作用域的(块是{}之间的任何东西)
- var 的「创建」和「初始化」都被提升了。
- function 的「创建」「初始化」和「赋值」都被提升了。
3 普通函数与箭头函数
普通函数和箭头函数的 this关键字指向是不同的
-
普通函数的this一般指的是它的直接调用者,默认情况下指的是window
-
call,apply,bind(ES5新增)绑定的,this指的是 绑定的对象
-
箭头函数 没有自己的this,并不是自己执行的对象,有可能是window对象
4.一元符号
eg: +true; !"Lydia";
答案为: 1 and false
一元加号会尝试将boolean类型转换为数字类型。 true被转换为1,false被转换为0。
字符串’Lydia’是一个真值。 我们实际上要问的是“这个真值是假的吗?”。 这会返回’false’
5.对象的属性
bird为一个对象
size是bird的一个属性
bird.size与 bird[“size”] 表达的是一样的,都是指bird的size属性
中括号里是字符串,指对象的属性
6.关于 new Number
let a = 3;
let b = new Number(3);
let c = 3;
console.log(a == b); // true;
console.log(a === b);//false;
console.log(b === c);//false;
new Number()是一个内置的函数构造函数,是一个对象,并不是一个数字
7.静态方法:static
class Chameleon {
static colorChange(newColor) {
this.newColor = newColor;
}
colorChange方法是静态的。 静态方法仅在创建它们的构造函数中存在,并且不能传递给任何子级。只能 Chameleon这个类调用它
8.事件传播的三个阶段
捕获 > 目标 > 冒泡
在捕获阶段,事件通过父元素向下传递到目标元素。 然后它到达目标元素,冒泡开始。
9.不是所有的对象都有原型
基础对象没有原型,基础对象可以访问某些方法和属性。
基础对象指原型链终点的对象。基础对象的原型是null
10.++运算符的前缀与后缀
后缀一元运算符++:
先返回值,在增加值
前缀一元运算符++:
先增加值,再返回增加后的值
11.带参数的数组
function getAge(...args) {
console.log(typeof args); //"object
}
getAge(21);
(…args)为一个带参数的数组,数组是一个对象
12.sessionStorage和localStorage
关闭选项卡后,将删除存储在sessionStorage中的数据。
使用localStorage,数据将永远存在,除非例如调用localStorage.clear()
13.JavaScript的假值
- undefined
- null
- NaN
- 0
- “”(empty string)
- false