输入输出题也是面试常考类型之一,虽然考察前端基础,比较简单,但是如果基础不扎实的同学还是很容易做错。
今天为大家分享一篇关于变成基础题的文章。大家试试能答对多少。
以下是正文:
let a = Symbol(1);
let b = Symbol(1);
console.log(a === b);
分析:
上面的结果为false是因为symbol创建的变量是唯一的、不可变的值,所以不存在两个一样的symbol类型的数据,可以看出Symbol在JavaScript中主要用于创建独特的属性键,以支持更高级别的封装和避免属性名冲突,尤其在大型项目和库的开发中非常有用,例如:key可以用symbol类型,因为key要是唯一的。
const a = [];
a = [1];
console.log(a);
分析:
上面报错的原因是const
关键字定义的变量,一旦赋值后,其值不能被改变。
const b = [];
b.push(2);
console.log(b);
分析:
上面的数组能够改变是因为在JavaScript中,使用const
定义的数组是不可以重新赋值的,但是你可以修改数组内部的元素,包括使用push
、pop
、splice
等方法来改变数组的内容,这是因为const
关键字保证的是变量引用的不可变性,而不是数组或对象内容的不可变性。
分析一下下面的输出结果:
function test(person) {
person.age = 30;
person = {
name: 'lpp',
age: 40
}
return person;
}
const p1 = {
name: 'ltt',
age: 18
}
const p2 = test(p1);
console.log(p1);
console.log(p2);
分析:
通过上面的图可以大致的了解上面代码的执行上下文,栈里有两个执行上下文test函数执行上下文和全局执行上下文:
全局执行上下文:
变量环境:test = func
词法环境:p1 = #001(#001为对象p1的引用地址,因为p1的数据类型为引用数据类型,引用数据类型的值存放在堆中)
test函数执行上下文:
变量环境:person = #001
词法环境:
test函数先是将p1的age改成了30,后面的person对象为一个新的对象,返回的person为该新对象,也就是p2为这个person,所以p1的结果为{name:'ltt',age:30},p2的结果为{name:'lpp',age:40}
function foo(x, y) {
x = {
n: 1
};
y.n = 2;
}
const obj = {
n: 1,
bar: {
n: 1
}
}
foo(obj, obj.bar);
console.log(obj);
分析:
上面给出了代码的执行上下文,在该栈中有两个执行上下文:foo函数执行上下文和全局执行上下文:
全局执行上下文:
变量环境:foo = func
词法环境:obj = #001(obj为引用数据类型,值存放在堆中)
foo函数执行上下文:
变量环境:x = #001, y = #002
词法环境:
调用foo
函数,传入的x
为obj
,也就是将引用地址给x
,即x = #001
,y
为obj.bar
,也就是将bar
的引用地址给y
,即y = #002
,x = {n:1}
是新形成了一个对象#003
,和obj
无关,y.n = 2;
就是修改bar
中n
的值,所以得到上面的结果。
原始类型
string number boolean null undefined symbol bigInt
浮点数,js在计算浮点数的时候会存在精度丢失,js会将浮点数转化为二进制进行相加
引用类型
typeof --- 可以判断除了null之外的所有原始类型
instanceof --- 只能判断引用类型(因为它是根据原型链来判断的)
object.prototype.toString.call(obj)
js中每一种类型都有自己的toString方法,可以分为3类
对象上的toString():返回一个'[object xxxx]'结构的字符串
数组上的toString():返回数组类元素用逗号分隔的字符串
其他:返回字符串字面量
toString(x),v8会读取到x的内部属性[[class]],这个属性记录的就是x所属的构造函数, toString()最终会返回 由"[object " + [[class]] + "]"组成的字符串
原文地址:https://juejin.cn/post/7384266820465934388
侵删
还没有使用过我们刷题网站(https://fe.ecool.fun/)或者前端面试题宝典的同学,如果近期准备或者正在找工作,千万不要错过,题库主打无广告和更新快哦~。
我们团队的前端辅导也做了将近2年了,陆陆续续辅导了几百位同学,分享一下最近几个结束辅导的回访。