面试必修课:解锁编程基础题的通关秘籍

哈喽,大家好,我是Fine。

输入输出题也是面试常考类型之一,虽然考察前端基础,比较简单,但是如果基础不扎实的同学还是很容易做错。

今天为大家分享一篇关于变成基础题的文章。大家试试能答对多少。

以下是正文:

第一道题

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定义的数组是不可以重新赋值的,但是你可以修改数组内部的元素,包括使用pushpopsplice等方法来改变数组的内容,这是因为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函数执行上下文和全局执行上下文:

  • 全局执行上下文:

  1. 变量环境:test = func

  2. 词法环境:p1 = #001(#001为对象p1的引用地址,因为p1的数据类型为引用数据类型,引用数据类型的值存放在堆中)

  • test函数执行上下文:

  1. 变量环境:person = #001

  2. 词法环境:

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函数执行上下文和全局执行上下文:

  • 全局执行上下文:

  1. 变量环境:foo = func

  2. 词法环境:obj = #001(obj为引用数据类型,值存放在堆中)

  • foo函数执行上下文:

  1. 变量环境:x = #001, y = #002

  2. 词法环境:

调用foo函数,传入的xobj,也就是将引用地址给x,即x = #001yobj.bar,也就是将bar的引用地址给y,即y = #002x = {n:1}是新形成了一个对象#003,和obj无关,y.n = 2;就是修改barn的值,所以得到上面的结果。

知识点总结

类型

  1. 原始类型

string number boolean null undefined symbol bigInt

  • 浮点数,js在计算浮点数的时候会存在精度丢失,js会将浮点数转化为二进制进行相加

  1. 引用类型

类型判断

  1. typeof --- 可以判断除了null之外的所有原始类型

  2. instanceof --- 只能判断引用类型(因为它是根据原型链来判断的)

  3. object.prototype.toString.call(obj)

toString()

js中每一种类型都有自己的toString方法,可以分为3类

  1. 对象上的toString():返回一个'[object xxxx]'结构的字符串

  2. 数组上的toString():返回数组类元素用逗号分隔的字符串

  3. 其他:返回字符串字面量

对象上的toString()

toString(x),v8会读取到x的内部属性[[class]],这个属性记录的就是x所属的构造函数, toString()最终会返回 由"[object " + [[class]] + "]"组成的字符串

原文地址:https://juejin.cn/post/7384266820465934388

侵删

最后

还没有使用过我们刷题网站(https://fe.ecool.fun/)或者前端面试题宝典的同学,如果近期准备或者正在找工作,千万不要错过,题库主打无广告和更新快哦~。

我们团队的前端辅导也做了将近2年了,陆陆续续辅导了几百位同学,分享一下最近几个结束辅导的回访。