知识库【一】

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

const settings = {	
  username: "lydiahallie",	
  level: 19,	
  health: 90	
};	
const data = JSON.stringify(settings, ["level", "health"]);	
console.log(data);
  • A: "{"level":19, "health":90}"

  • B: "{"username": "lydiahallie"}"

  • C: "["level", "health"]"

  • D: "{"username": "lydiahallie", "level":19, "health":90}"

    答案: A

    JSON.stringify的第二个参数是 替代者(replacer). 替代者(replacer)可以是个函数或数组,用以控制哪些值如何被转换为字符串。

    如果替代者(replacer)是个 数组 ,那么就只有包含在数组中的属性将会被转化为字符串。在本例中,只有名为 "level" 和 "health" 的属性被包括进来, "username"则被排除在外。data 就等于 "{"level":19, "health":90}".

    而如果替代者(replacer)是个 函数,这个函数将被对象的每个属性都调用一遍。函数返回的值会成为这个属性的值,最终体现在转化后的JSON字符串中(译者注:Chrome下,经过实验,如果所有属性均返回同一个值的时候有异常,会直接将返回值作为结果输出而不会输出JSON字符串),而如果返回值为 undefined,则该属性会被排除在外。

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


const person = { name: "Lydia" };	
Object.defineProperty(person, "age", { value: 21 });	
console.log(person);	
console.log(Object.keys(person));
  • A: {name:"Lydia",age:21}["name","age"]

  • B: {name:"Lydia",age:21}["name"]

  • C: {name:"Lydia"}["name","age"]

  • D: {name:"Lydia"}["age"]

答案: B

通过 defineProperty方法,我们可以给对象添加一个新属性,或者修改已经存在的属性。而我们使用 defineProperty方法给对象添加了一个属性之后,属性默认为 不可枚举(not enumerable). Object.keys方法仅返回对象中 可枚举(enumerable) 的属性,因此只剩下了 "name".

用 defineProperty方法添加的属性默认不可变。你可以通过 writableconfigurable 和 enumerable属性来改变这一行为。这样的话, 相比于自己添加的属性, defineProperty方法添加的属性有了更多的控制权。

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

// counter.js	
let counter = 10;	
export default counter;

// index.js	
import myCounter from "./counter";	
myCounter += 1;	
console.log(myCounter);
  • A: 10

  • B: 11

  • C: Error

  • D: NaN

答案: C

引入的模块是 只读 的: 你不能修改引入的模块。只有导出他们的模块才能修改其值。

当我们给 myCounter增加一个值的时候会抛出一个异常:myCounter是只读的,不能被修改。

 

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


let person = { name: "Lydia" };	
const members = [person];	
person = null;	
console.log(members);
  • A: null

  • B: [null]

  • C: [{}]

  • D: [{name:"Lydia"}

答案: D

 

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


let num = 10;	
const increaseNumber = () => num++;	
const increasePassedNumber = number => number++;	
const num1 = increaseNumber();	
const num2 = increasePassedNumber(num1);	
console.log(num1);	
console.log(num2);
  • A: 1010

  • B: 1011

  • C: 1111

  • D: 1112

答案: A

++ 先返回 操作值, 再累加 操作值

 

6、下面代码输出什么?

[1, 2, 3, 4].reduce((x, y) => console.log(x, y));
  • A: 1 2 and 3 3 and 6 4

  • B: 1 2 and 2 3 and 3 4

  • C: 1 undefined and 2 undefined and 3 undefined and 4 undefined

  • D: 1 2 and undefined 3 and undefined 4

答案: D

回调函数没有返回任何值,则返回undefined

 

7、下面代码输出什么?


// index.js	
console.log('running index.js');	
import { sum } from './sum.js';	
console.log(sum(1, 2));	
// sum.js	
console.log('running sum.js');	
export const sum = (a, b) => a + b;
  • A: running index.jsrunning sum.js3

  • B: running sum.jsrunning index.js3

  • C: running sum.js3running index.js

  • D: running index.jsundefinedrunning sum.js

答案: B

import命令是编译阶段执行的,在代码运行之前。因此这意味着被导入的模块会先运行,而导入模块的文件会后执行。

这是CommonJS中 require()和 import之间的区别。使用 require(),您可以在运行代码时根据需要加载依赖项。如果我们使用 require而不是 import, running index.js, running sum.js, 3会被依次打印。

 

8、下面代码输出什么?

console.log(String.raw`Hello\nworld`);
  • A: Helloworld!

  • B: Hello world

  • C: Hello\nworld

  • D: Hello\n world

答案: C

String.raw函数是用来获取一个模板字符串的原始字符串的,它返回一个字符串,其中忽略了转义符( \n, \v, \t等)。但反斜杠可能造成问题,因为你可能会遇到下面这种类似情况:

  1. const path = `C:\Documents\Projects\table.html`

  2. String.raw`${path}`

这将导致:

"C:DocumentsProjects able.html"

直接使用 String.raw

String.raw`C:\Documents\Projects\table.html`

它会忽略转义字符并打印:C:\Documents\Projects\table.html

上述情况,字符串是 Hello\nworld被打印出。

 

9、下面代码输出什么?


function addToList(item, list) {	
  return list.push(item);	
}	
const result = addToList("apple", ["banana"]);	
console.log(result);
  • A: ['apple','banana']

  • B: 2

  • C: true

  • D: undefined

答案: B

push()方法返回新数组的长度。一开始,数组包含一个元素(字符串 "banana"),长度为1。 在数组中添加字符串 "apple"后,长度变为2,并将从 addToList函数返回。

push方法修改原始数组,如果你想从函数返回数组而不是数组长度,那么应该在push item之后返回 list

 

 

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值