2020.4.12

当我们这样做的时候会发生什么?

1
2
3
4
function bark() {
console.log("woof!"");
}
bark.animal = "dog"
  • A:Nothing,this is totally fine!
  • B:SyntaxError. You cannot add properties to a function this way.
  • C:Undefind
  • D:ReferenceError

解析:A。这在 JavaScript 中是可能的,因为函数也是对象!(原始类型之外的所有东西都是对象)。函数是一种特殊类型的对象,自己编写的代码并不是实际的函数。该函数是具有属性的对象,此属性是可调用的。


2020.4.13

下面的代码会输出什么?

1
2
3
4
5
6
7
8
9
10
function Person(firstName, lastName) {
this.firstName = firstName
this.lastName = lastName
}

const lydia = new Person('Lydia', 'Hallie')
const sarah = Person('Sarah', 'Smith')

console.log(lydia)
console.log(sarah)
  • A:Person{fistName: “Lydia”, lastName:”Hallie”} and undefined
  • B:Person{fistName: “Lydia”, lastName:”Hallie”} and Person{fistName: “Sarah”, lastName:”Smith”}
  • C:Person{fistName: “Lydia”, lastName:”Hallie”} and {}
  • D:Person{fistName: “Lydia”, lastName:”Hallie”} and ReferenceError

解析:A。对于 sarah,我们没有使用 new 关键字。使用 new 时,它指的是我们创建的新空对象,但是,如果你不添加 new,它指的是全局对象!我们制定了 this.firstName = “Sarah”和 this.lastName = “Samith”。我们实际做的是定于 global.firstName = “Sarah”和 global.lastName = “Samith”。sarah 本身返回值是 undefined。


2020.4.14

下面代码的输出是什么?

1
2
3
4
let number = 0
console.log(number++)
console.log(++number)
console.log(number)
  • A:1 1 2
  • B:1 2 2
  • C:0 2 2
  • D:0 1 2

解析:C。

  • 后缀 一元运算符++:
    • 1、返回值(返回 0);
    • 2、增加值(现在数值是 1)。
  • 前缀 一元运算符++:
    • 1、增加值(现在数值是 2)
    • 2、返回值(返回 2)
  • 所以返回 0 2 2

2020.4.15

单击按钮时 event.tatget 是什么?

1
2
3
4
5
<div onclick="console.log('first dib')">
<div onclick="console.log('second div)">
<button onclick="console.log('button')">click</button>
</div>
</div>
  • A:div 外部
  • B:div 内部
  • C:button
  • D:所有嵌套元素的数组

解析:C。导致事件的最深嵌套元素是事件的目标。你可以通过event.stopPropagation 停止冒泡。


2020.4.16

下面代码的输出是什么?

1
2
3
4
5
6
7
8
9
10
11
function checkAge(date) {
if (data === { age: 18 }) {
console.log('You are an abult')
} else if (data == { age: 18 }) {
console.log('You are still an abult')
} else {
console.log('Hmm..You donot have an age I guess')
}
}

checkAge({ age: 18 })
  • A:You are an abult
  • B:You are still an abult
  • C:Hmm..You donot have an age I guess

解析:C。在比较相等性,原始类型通过它们的值进行比较,而对象通过它们的引用进行比较。JavaScript 检查对象是否具有对内存中相同位置的引用。我们作为参数传递的对象和我们用于检查相等性的对象在内存中位于不同的位置,所以它们的引用是不同的。

这就是为什么 {age:18} === {age:18} 和 {age:18} == {age:18} 返回 false 的原因。


2020.4.17

下面代码输出什么?

1
2
3
4
5
function sum(a, b) {
return a + b
}

sum(1, '2')
  • A:NaN
  • B:TypeError
  • C:”12”
  • D:3

解析:C。JavaScript 是一种动态类型语言:我们没有指定某些变量的类型。在您不知道的情况下,值可以自动转换为另一类型,称为隐式类型转换。 强制从一种类型转换为另一种类型。

在此示例中,JavaScript 将数字 1 转换为字符串,以使函数有意义并返回值。在让数字类型1和字符串类型“2”相加时,该数字被视为字符串。我们可以像连接 “hello” +“world” 这样的字符串,所以这里发生的是“1”+2”,返回“12”


2020.4.18

所有对象都有原型?

  • A:对
  • B:错误

解析:B。除基础对象外,所有对象都有原型。基础对象可以访问某些方法和属性,例如:toString 。这就是你可以使用内置 JavaScript 方法的原因!所有这些方法都可以在原型上找到。虽然 JavaScript 无法直接在你的对象上找到它,但它会沿着原型链向下寻找并在那里找到它,这使你可以访问它。

注:基础对象指原型链终点的对象。基础对象的原型是 null


2020.4.19

下面代码输出的是什么?

1
2
const obj = { a: 'one', b: 'two', c: 'three' }
console.log(obj)
  • A:{a:”noe”, b:”two”}
  • B:{ b:”two”, a:”three”}
  • C:{a:”three”, b:”two”}
  • D:SyntaxError

解析:C。如果对象有两个具有相同名称的键,则将替换前面的键。它仍然处于原来的位置,但具有最后指定的值。


2020.4.20

简述箭头函数和普通函数的区别?能不能作为构造函数?

  • 语法更加简洁、清晰

  • 箭头函数不会创建自己的 this

  • 箭头函数继承而来的 this 指向永远不变

  • .call() / .apply() / .bind() 无法改变箭头函数中 this 的指向

  • 箭头函数不能作为构造函数使用

  • 箭头函数没有自己的 arguments

  • 箭头函数没有原型 prototype

  • 箭头函数不能用作 Generator 函数,不能使用 yeild 关键字


2020.4.21

下面代码的输出是什么?

1
2
3
4
5
6
7
function getAge() {
'use strict'
age = 21
console.log(age)
}

getAge()
  • A:21
  • B:undefined
  • C:ReferenceError
  • D:TypeError

解析:C。使用 use strict 可以确保不会意外的声明全局变量。我们从未声明变量 age ,因此我们使用 use strict ,它会引发一个 ReferenceError。如果我们不使用 use strict ,它就会起作用,因为属性 age 会被添加到全局对象中。


2020.4.22

下面的代码输出是什么?

1
const sum = eval('10*10+5')
  • A:105
  • B:”105”
  • C:TypeError
  • D:”10-10+5”

解析:A.。eval 会为字符串传递的代码求值。如果它是一个表达式,现在这种情况下一样,它会计算表达式。表达式为 10*10+5 计算得到 105


2020.4.23

单击下面的 html 片段打印的内容是什么?

1
2
3
4
5
<div onclick="console.log('div')>
<p onclick="console.log('p')">
Click Here!
</p>
</div>
  • A:p div
  • B:div p
  • C:p
  • D:div

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


2020.4.24

下面代码的输出是什么?

1
2
3
4
5
String.prototype.giveLydiaPizza = () => {
return "Just give Lydia pizza already!“
};
const name = "Lydia";
name.giveLydiaPizza()
  • A:”Just give Lydia pizza already!“
  • B:TypeError:not a function
  • C:SyntaxError
  • D:undefined

解析:A。String 是一个内置的构造函数,我们可以为它添加属性。我刚给它的原型添加了一个方法。原始类型的字符串自动转换为字符串对象,由字符串原型函数生成。因此,所有字符串(字符串对象)都可以访问该方法。

注:当使用基本类型的字符串调用 giveLydiaPizza 时,实际上发生了下面的过程:

  • 创建一个 String 的包装类型实例
  • 在实例上调用 substring 方法
  • 销毁实例

2020.4.25

下面代码的输出是什么?

1
console.log(typeof typeof 1)
  • A:”number”
  • B:”string”
  • C:”object”
  • D:”undefined”

解析:B。typeof 1 返回 “number”typeof "number" 返回 "string"


2020.4.26

下面代码的输出是什么?

1
2
3
const numbers = [1, 2, 3]
numbers[10] = 11
console.log(numbers)
  • A:[1, 2, 3, 7 x null, 11]
  • B:[1, 2, 3, 11]
  • C:[1, 2, 3, 7 x empty, 11]
  • D:SyntaxError

解析:C。当你为数组中的元素设置一个超过数组长度的值是,JavaScript 会创建一个名为 “空插槽” 的东西。这些位置的值实际上是 undefined ,但你会看到类似的东西:[1, 2, 3, 7xempty, 11] 这取决于你运行它的位置(每个浏览器有可能不同)。