age: 21 } B: "name", "age" C: "Lydia", 21 D: ["name", "Lydia"], ["age", 21] 答案: B 在for-in循环中,我们可以通过对象的key...来进行迭代,也就是这里的name和age。...在底层,对象的key都是字符串(如果他们不是Symbol的话)。在每次循环中,我们将item设定为当前遍历到的key.所以一开始,item是name,之后 item输出的则是age。
args); } getAge(21); A: "number" B: "array" C: "object" D: "NaN" 参考答案: C 解析: 扩展运算符(...args )返回一个带参数的数组
for (let i = 1; i < 5; i++) { if (i === 3) continue; console.log(i); } A: 1 ...
null; console.log(members); A: null B: [null] C: [{}] D: [{ name: "Lydia" }] 答案: D 首先我们声明了一个拥有name属性的对象...(注意一点,他们的引用 并不相同!) 接下来我们让person等于null。 我们没有修改数组第一个元素的值,而只是修改了变量person的值,因为元素(复制而来)的引用与person不同。...members的第一个元素仍然保持着对原始对象的引用。当我们输出members数组时,第一个元素会将引用的对象打印出来。
使用new时,它指的是我们创建的新空对象。但是,如果你不添加new它指的是全局对象! 我们指定了this.firstName等于'Sarah和this.lastName等于Smith。...我们实际做的是定义global.firstName ='Sarah'和global.lastName ='Smith。 sarah本身的返回值是undefined。
numbers; console.log(y); A: [[1, 2, 3, 4, 5]] B: [1, 2, 3, 4, 5] C: 1 D: [1] 答案: C 我们可以通过解构赋值来解析来自对象的数组或属性的值...,比如说: [a, b] = [1, 2]; a的值现在是1,b的值现在是2.而在题目中,我们是这么做的: [y] = [1, 2, 3, 4, 5]; 也就是说,y等于数组的第一个值就是数字1.我们输出
" console.log(name()) A: SyntaxError B: ReferenceError C: TypeError D: undefined 答案: C 变量name保存字符串的值...但它是一个字符串,因此抛出TypeError:name is not a function 当你编写了一些非有效的JavaScript时,会抛出语法错误,例如当你把return这个词写成retrun时。...当JavaScript无法找到您尝试访问的值的引用时,抛出ReferenceErrors。
所以在这种情况下应该这样写: Person.prototype.getFullName = function () { return `${this.firstName} ${this.lastName...}`; } 这样会使member.getFullName()是可用的,为什么样做是对的?...这会浪费大量内存空间,因为它们仍然具有该属性,这占用了每个实例的内存空间。相反,如果我们只将它添加到原型中,我们只需将它放在内存中的一个位置,但它们都可以访问它!
const sum = eval("10*10+5"); A: 105 B: "105" C: TypeError D: "10*10+5" 答案: A eval会为字符串传递的代码求值。
Mara","Woof I am Mara" C: "Woof I am Mara", undefined D: TypeError, TypeError 答案: A 我们可以用delete关键字删除对象的属性...,对原型也是适用的。...删除了原型的属性后,该属性在原型链上就不可用了。在本例中,函数bark在执行了delete Dog.prototype.bark后不可用, 然而后面的代码还在调用它。...当我们尝试调用一个不存在的函数时TypeError异常会被抛出。在本例中就是 TypeError: pet.bark is not a function,因为pet.bark是undefined.
num1的值是10, 因为increaseNumber函数首先返回num的值,也就是10,随后再进行 num的累加。...num2是10因为我们将 num1传入increasePassedNumber. number等于10(num1的值。同样道理,++ 先返回 操作值, 再累加 操作值。)
console.log(newList.push(5)); A: [1,2,3,4,5] B: [1,2,3,5] C: [1,2,3,4] D: Error 参考答案: D 解析: .push()方法返回数组的长度...,而不是数组的本身。
(acc) (累计器) Current Value (cur) (当前值) Current Index (idx) (当前索引) Source Array (src) (源数组) reducer 函数的返回值将会分配给累计器...,该返回值在数组的每个迭代中被记住,并最后成为最终的单个结果值。...reducer 函数还有一个可选参数initialValue, 该参数将作为第一次调用回调函数时的第一个参数的值。如果没有提供initialValue,则将使用数组中的第一个元素。...在上述例子,reduce方法接收的第一个参数(Accumulator)是x, 第二个参数(Current Value)是y。...例子中我们的回调函数没有返回任何值,只是打印累加器的值和当前值。如果函数没有返回值,则默认返回undefined。
} C: { name: "Lydia", age: 21, city: undefined } D: "Amsterdam" 答案: A 我们将变量city设置为等于person对象上名为city的属性的值...这个对象上没有名为city的属性,因此变量city的值为undefined。 请注意,我们没有引用person对象本身,只是将变量city设置为等于person对象上city属性的当前值。...这不会更改person对象:没有对该对象的引用。 因此打印person对象时,会返回未修改的对象。
typeof 1 返回 "number". typeof "number" 返回 "string"
这个构造函数的名字是Sarah,所以新的Person实例member上的name属性是Sarah。
"pear", "orange"] C: ["banana", "apple", ["pear"], "orange"] D: SyntaxError 答案: D ... args是剩余参数,剩余参数的值是一个包含所有剩余参数的数组...上述示例中,剩余参数是第二个参数,这是不可能的,并会抛出语法错误。...return [...fruitList, ...args, favoriteFruit] } getItems(["banana", "apple"], "pear", "orange") 上述例子是有效的,
与“2”串联的“[Object object]”成为“[Object object]2”。
: 100, y: 20 } B: { x: 10, y: 20 } C: { x: 100 } D: ReferenceError 答案: B Object.freeze使得无法添加、删除或修改对象的属性...(除非属性的值是另一个对象)。...当我们创建变量shape并将其设置为等于冻结对象box时,shape指向的也是冻结对象。...由于shape被冻结,并且x的值不是对象,所以我们不能修改属性x。 x仍然等于10,{x:10,y:20}被打印。
Lydia"}, ["name", "age"] D: { name: "Lydia"}, ["age"] 答案: B 通过defineProperty方法,我们可以给对象添加一个新属性,或者修改已经存在的属性...Object.keys方法仅返回对象中 可枚举(enumerable) 的属性,因此只剩下了"name". 用defineProperty方法添加的属性默认不可变。...这样的话, 相比于自己添加的属性,defineProperty方法添加的属性有了更多的控制权。
领取专属 10元无门槛券
手把手带您无忧上云