资讯专栏INFORMATION COLUMN

平时遇到的JS笔试题

YJNldm / 1900人阅读

摘要:由于第一个循环中的变量是使用关键字声明的,因此该值是全局的。检查对象是否具有对内存中相同位置的引用。在事件传播期间,有三个阶段捕获,目标和冒泡。当我们传递参数时,这与变量的不同。

1.下面代码的输出是什么?

    for (var i = 0; i < 3; i++) {
        setTimeout(() => console.log(i), 1);
    }

    for (let i = 0; i < 3; i++) {
      setTimeout(() => console.log(i), 1);
    }

答案:
由于JavaScript中的事件执行机制,setTimeout函数真正被执行时,循环已经走完。
由于第一个循环中的变量i是使用var关键字声明的,因此该值是全局的。 在循环期间,我们每次使用一元运算符++都会将i的值增加1。
因此在第一个例子中,当调用setTimeout函数时,i已经被赋值为3。
在第二个循环中,使用let关键字声明变量i:使用let(和const)关键字声明的变量是具有块作用域的(块是{}之间的任何东西)。
在每次迭代期间,i将被创建为一个新值,并且每个值都会存在于循环内的块级作用域。

2.下面代码的输出是什么?

    const shape = {
      radius: 10,
      diameter() {
        return this.radius * 2
     },
      perimeter: () => 2 * Math.PI * this.radius 
    };
    
    shape.diameter();
    shape.perimeter();
请注意,diameter是普通函数,而perimeter是箭头函数。
对于箭头函数,this关键字指向是它所在上下文(定义时的位置)的环境,与普通函数不同!
这意味着当我们调用perimeter时,它不是指向shape对象,而是指其定义时的环境(window)。没有值radius属性,返回undefined。

3.下面代码的输出是什么?

    +true;
    !"Lydia";
一元加号会尝试将boolean类型转换为数字类型。 true被转换为1,false被转换为0。

字符串"Lydia"是一个真值。 我们实际上要问的是“这个真值是假的吗?”。 这会返回false。

4.下面代码的输出是什么?

function checkAge(data) {
  if (data === { age: 18 }) {
    console.log("You are an adult!");
  } else if (data == { age: 18 }) {
    console.log("You are still an adult.");
  } else {
    console.log(`Hmm.. You don"t have an age I guess`);
  }
}

checkAge({ age: 18 });
在比较相等性,原始类型通过它们的值进行比较,而对象通过它们的引用进行比较。JavaScript检查对象是否具有对内存中相同位置的引用。
我们作为参数传递的对象和我们用于检查相等性的对象在内存中位于不同位置,所以它们的引用是不同的。 这就是为什么{ age: 18 } ===
{ age: 18 }和 { age: 18 } == { age: 18 } 返回 false的原因。

5.下面代码的输出是什么?

function getAge(...args) {
  console.log(typeof args);
}

getAge(21);
扩展运算符(... args)返回一个带参数的数组。 数组是一个对象,因此typeof args返回object

6.下面代码的输出是什么?

const obj = { 1: "a", 2: "b", 3: "c" };
const set = new Set([1, 2, 3, 4, 5]);

obj.hasOwnProperty("1");
obj.hasOwnProperty(1);
set.has("1");
set.has(1);
所有对象键(不包括Symbols)都会被存储为字符串,即使你没有给定字符串类型的键。
这就是为什么obj.hasOwnProperty("1")也返回true。 上面的说法不适用于Set。
在我们的Set中没有“1”:set.has("1")返回false。 它有数字类型1,set.has(1)返回true。

7.下面代码的输出是什么?

for (let i = 1; i < 5; i++) {
  if (i === 3) continue;
  console.log(i);
}
如果某个条件返回true,则continue语句跳过迭代。

8.下面代码的输出是什么?

    const a = {}; const b = { key: "b" }; const c = { key: "c" };
    
    a[b] = 123; a[c] = 456;
    
    console.log(a[b]);

对象键自动转换为字符串。我们试图将一个对象设置为对象a的键,其值为123。 但是,当对象自动转换为字符串化时,它变成了[Object
object]。 所以我们在这里说的是a["Object object"] = 123。 然后,我们可以尝试再次做同样的事情。
c对象同样会发生隐式类型转换。那么,a["Object object"] = 456。 然后,我们打印a[b],它实际上是a["Object
object"]。 我们将其设置为456,因此返回456。

9.下面代码的输出是什么?

    

Click here!

如果我们单击p,我们会看到两个日志:p和div。在事件传播期间,有三个阶段:捕获,目标和冒泡。
默认情况下,事件处理程序在冒泡阶段执行(除非您将useCapture设置为true)。 它从最深的嵌套元素向外延伸。

10.下面这些值哪些是假值?

0;
new Number(0);
("");
(" ");
new Boolean(false);
undefined;

JavaScript中只有6个假值:

undefined null NaN 0 "" (empty string) false
函数构造函数,如new Number和new
Boolean都是真值。

11.下面代码的输出是什么?

    (() => {
      let x, y;
      try {
        throw new Error();
      } catch (x) {
        (x = 1), (y = 2);
        console.log(x);
      }
      console.log(x);
      console.log(y);
    })();
catch块接收参数x。当我们传递参数时,这与变量的x不同。这个变量x是属于catch作用域的。
之后,我们将这个块级作用域的变量设置为1,并设置变量y的值。 现在,我们打印块级作用域的变量x,它等于1。
在catch块之外,x仍然是undefined,而y是2。
当我们想在catch块之外的console.log(x)时,它返回undefined,而y返回2。

12.setInterval方法的返回值什么?

    setInterval(() => console.log("Hi"), 1000);
它返回一个唯一的id。 此id可用于使用clearInterval()函数清除该定时器

13.下面代码的输出是什么?

    [..."Lydia"];
字符串是可迭代的。 扩展运算符将迭代的每个字符映射到一个元素。 ["L", "y", "d", "i", "a"]

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/104772.html

相关文章

  • 如何招聘一名优秀前端

    摘要:如何考察一个人是不是经验丰富我们需要在问答式的面试中,对其项目经验进行挖掘。如何设置笔试题现在网上有大量的面经的存在,对于我们面试是一个巨大的挑战。尊重应聘者我们要尊重每一个来应聘的人,不要轻视别人,或者故意刁难别人。 时光荏苒,2个月前,我才刚总结了如何应对面试官,现在的我开始总结如何面试别人了。笑哭.png 1.我们需要什么样的人 招聘肯定要有标准,这样我们才能更快的找到我们需要的...

    Mr_houzi 评论0 收藏0
  • 前端试题试题记录(上)

    摘要:后续前端笔试题面试题记录下小结我想说的是在找工作期间,肯定有自己发挥不好,或者不会的问题,一定要在晚上的时候自己再学习总结一下,在一个问题上面尽量不要栽倒两次,学到了的才是自己的。 前言 过完元宵,就到上海找了波工作,现在已经入职好了,蹭波热点,写一波面试记录,内容包含笔试题和面试题,还有一些没有写进来,准备再开一篇,许久没写了,写的确实有些慢。如果喜欢的话可以点波赞,或者关注一下,希...

    wind3110991 评论0 收藏0
  • 前端试题试题记录(上)

    摘要:后续前端笔试题面试题记录下小结我想说的是在找工作期间,肯定有自己发挥不好,或者不会的问题,一定要在晚上的时候自己再学习总结一下,在一个问题上面尽量不要栽倒两次,学到了的才是自己的。 前言 过完元宵,就到上海找了波工作,现在已经入职好了,蹭波热点,写一波面试记录,内容包含笔试题和面试题,还有一些没有写进来,准备再开一篇,许久没写了,写的确实有些慢。如果喜欢的话可以点波赞,或者关注一下,希...

    Caizhenhao 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<