美文网首页
关于JavaScript的43道题①1~5题

关于JavaScript的43道题①1~5题

作者: JiAyInNnNn | 来源:发表于2019-06-17 16:49 被阅读0次

最近在github上大火的43到js代码题,有很多人搬运。
原链接https://github.com/lydiahallie/javascript-questions

  1. 下面代码的输出是什么?
function sayHi() {
  console.log(name);
  console.log(age);
  var name = "Lydia";
  let age = 21;
}

sayHi();

A: Lydia 和 undefined
B: Lydia 和 ReferenceError
C: ReferenceError 和 21
D: undefined 和 ReferenceError

实际运行后

使用let关键字(和const)声明的变量也会存在变量提升,但与var不同,初始化没有被提升。 在我们声明(初始化)它们之前,它们是不可访问的。 这被称为“暂时死区”。 当我们在声明变量之前尝试访问变量时,JavaScript会抛出一个ReferenceError。

变量的赋值可以分为三个阶段:

创建变量,在内存中开辟空间
初始化变量,将变量初始化为undefined
真正赋值

  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);
}

A: 0 1 2 and 0 1 2
B: 0 1 2 and 3 3 3
C: 3 3 3 and 0 1 2

实际输出后

由于JavaScript中的事件执行机制,setTimeout函数真正被执行时,循环已经走完。 由于第一个循环中的变量i是使用var关键字声明的,因此该值是全局的。 在循环期间,我们每次使用一元运算符++都会将i的值增加1。 因此在第一个例子中,当调用setTimeout函数时,i已经被赋值为3。

  1. 下面代码的输出是什么?
const shape = {
  radius: 10,
  diameter() {
    return this.radius * 2;
  },
  perimeter: () => 2 * Math.PI * this.radius
};

shape.diameter();
shape.perimeter();

A: 20 and 62.83185307179586
B: 20 and NaN
C: 20 and 63
D: NaN and 63

请注意,diameter是普通函数,而perimeter是箭头函数。
对于箭头函数,this关键字指向是它所在上下文(定义时的位置)的环境,与普通函数不同! 这意味着当我们调用perimeter时,它不是指向shape对象,而是指其定义时的环境(window)。没有值radius属性,返回undefined。
tips:Math.PI表示一个圆的周长与直径的比例,约为 3.14159

  1. 下面代码的输出是什么?
+true;
!"Lydia";

A: 1 and false
B: false and NaN
C: false and false

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

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

  1. 哪个选项是不正确的?
const bird = {
  size: "small"
};

const mouse = {
  name: "Mickey",
  small: true
};

A: mouse.bird.size
B: mouse[bird.size]
C: mouse[bird["size"]]
D: All of them are valid

在JavaScript中,所有对象键都是字符串(除了Symbol)。尽管有时我们可能不会给定字符串类型,但它们总是被转换为字符串。
JavaScript解释语句。当我们使用方括号表示法时,它会看到第一个左括号[,然后继续,直到找到右括号]。只有在那个时候,它才会对这个语句求值。
mouse [bird.size]:首先它会对bird.size求值,得到small。 mouse [“small”]返回true。
但是,使用点表示法,这不会发生。 mouse没有名为bird的键,这意味着mouse.bird是undefined。 然后,我们使用点符号来询问size:mouse.bird.size。 由于mouse.bird是undefined,我们实际上是在询问undefined.size。 这是无效的,并将抛出Cannot read property "size" of undefined。

作者:ConardLi
链接:https://juejin.im/post/5d0644976fb9a07ed064b0ca
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关文章

  • 关于JavaScript的43道题①1~5题

    最近在github上大火的43到js代码题,有很多人搬运。原链接https://github.com/lydiah...

  • 关于setTimeout的面试题

    经常看到网上的前端面试题中会有关于setTimeout的这道题,这题经常有人写,一道题包含了javascript ...

  • 学习笔记C++(预处理、const、sizeof)

    1、宏定义(详细文档) 题一题分析连接 ps: 关于题补充记忆:&array[5]表示array[5]的地址 - ...

  • 中级备考日志记录

    20200422 实务 检测 5道客观题 1道计算分析题 1.债权投资的摊余成本 分录法计算 应用计算分析题 ...

  • 智慧树微机原理(山东联盟)第七章测试

    1【判断题】 (5分)MSP430单片机集成了丰富的片内外设。 A.对 2【判断题】 (5分)ROM型的MSP43...

  • 亲子日记第95篇

    5月12日 星期六 晴 今天做数学题,你说有一道题不会,我看了一下是你们刚学的关于“面积”,的一道题,我问你...

  • 十道变态推理题

    据说答对3道题的人是变态狂,答对5道题的是杀人狂,答对10道题的就是变态杀人狂。一道题都答不上来的是弱智。 题 目...

  • 5道题

    1、队列和栈有什么特点: *队列先进先出,栈先进后出 *从"数据结构"的角度看,它们都是线性结构,即数据元素之间的...

  • 程序员进阶之算法练习(三十四)LeetCode专场

    前言 LeetCode上的题目是大公司面试常见的算法题,今天的目标是拿下5道算法题:1、2、3题都是Medium的...

  • FizzBuzzWhizz

    JavaScript 针对那道题,我是这么想的: 先判断是否为3 and 5 and 7的公倍数,若不是接着判断,...

网友评论

      本文标题:关于JavaScript的43道题①1~5题

      本文链接:https://www.haomeiwen.com/subject/lcnafctx.html