2020-05-18一些面试题(其一)

157 阅读5分钟

一.

1.下面代码输出什么?

console.log(3+ 4 + "5");

a."345" b."75" c.12 d."12"

b

2.下面代码输出什么?

[1,2,3].map(num => {
   if(typeof num === "number") return;
   return num * 2;
});

a.[] b.[null,null,null] c.[undefined,undefined,undefined] d.[3x empty]

C

对数组进行映射的时候, num就是当前循环到的元素. 在这个例子中,所有的映射都是number类型,所以if中的判断 typeofnum==="number"结果都是 true.map函数创建了新数组并且将函数的返回值插入数组。 但是,没有任何值返回。当函数没有返回任何值时,即默认返回 undefined.对数组中的每一个元素来说,函数块都得到了这个返回值,所以结果中每一个元素都是 undefined.

3.下面代码输出什么?

const set = new Set([1,1,2,3,4]);
console.log(set);

a.[1,1,2,3,4] b.[1,2,3,4] c.{1,1,2,3,4} d.{1,2,3,4}

D

Set对象手机 独一无二 的值:也就是说同一个值在其中仅出现一次。 我们传入了数组 [1,1,2,3,4],他有一个重复值 1.以为一个集合里不能有两个重复的值,其中一个就被移除了。所以结果是 {1,2,3,4}.

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

// 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是只读的,不能被修改。

5.下面代码输出什么?

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方法添加的属性默认不可变。你可以通过 writable, configurable 和 enumerable属性来改变这一行为。这样的话, 相比于自己添加的属性, defineProperty方法添加的属性有了更多的控制权。

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

let num = 10;

const increaseNumber = () => num++;
const increasePassedNumber = number => number++;

const num1 = increaseNumber();
const num2 = increasePassedNumber(num1);
 
console.log(num1);
console.log(num2);

A: 10, 10 B: 10, 11 C: 11, 11 D: 11, 12

A.

一元操作符 ++ 先返回 操作值, 再累加 操作值。num1的值是 10, 因为 increaseNumber函数首先返回 num的值,也就是 10,随后再进行 num的累加。 num2是 10因为我们将 num1传入 increasePassedNumber. number等于 10( num1的值。同样道理, ++ 先返回 操作值, 再累加 操作值。) number是 10,所以 num2也是 10.

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.js, running sum.js, 3

B: running sum.js, running index.js, 3

C: running sum.js, 3, running index.js

D: running index.js, undefined, running sum.js

B

import命令是编译阶段执行的,在代码运行之前。因此这意味着被导入的模块会先运行,而导入模块的文件会后执行。 这是CommonJS中 require()和 import之间的区别。使用 require(),您可以在运行代码时根据需要加载依赖项。如果我们使用 require而不是 import, running index.js, running sum.js, 3会被依次打印。

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

console.log(Number(2) === Number(2))
console.log(Boolean(false) === Boolean(false))
console.log(Symbol('foo') === Symbol('foo'))

A: true, true, false B: false, true, false C: true, false, true D: true, true, true

A 每个 Symbol都是完全唯一的。传递给 Symbol的参数只是给 Symbol的一个描述。Symbol的值不依赖于传递的参数。当我们测试相等时,我们创建了两个全新的符号:第一个 Symbol('foo'),第二个 Symbol('foo'), 这两个值是唯一的,彼此不相等,因此返回 false。

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。

10.下面代码输出是什么?

function* generator(i) {
  yield i; 
  yield i * 2;
}
 
const gen = generator(10);
 
console.log(gen.next().value);
console.log(gen.next().value);

A: [0,10],[10,20]

B: 20,20

C: 10,20

D: 0,10and10,20

C 一般的函数在执行之后是不能中途停下的。但是,生成器函数却可以中途“停下”,之后可以再从停下的地方继续。当生成器遇到 yield关键字的时候,会生成 yield后面的值。注意,生成器在这种情况下不 返回(return )值,而是 生成 (yield)值。 首先,我们用 10作为参数 i来初始化生成器函数。然后使用 next()方法一步步执行生成器。第一次执行生成器的时候, i的值为 10,遇到第一个 yield关键字,它要生成 i的值。此时,生成器“暂停”,生成了 10。 然后,我们再执行 next()方法。生成器会从刚才暂停的地方继续,这个时候 i还是 10。于是我们走到了第二个 yield关键字处,这时候需要生成的值是 i*2, i为 10,那么此时生成的值便是 20。所以这道题的最终结果是 10,20。

二.

1.请描述下v-show和v-if的区别

2.父组件和组件传值是什么

3.深拷贝和浅拷贝的区别是?请举例

4.get和post请求有什么区别

5.请详细说下你对Vue生命周期的理解

6.介绍一下你对浏览器内核的理解

搜了下发现第一大题的选择题全部抄自github很火的 javascript-questions。。。

送你43道JavaScript面试题

送你58道JavaScript面试题(上)