进来做几道 JavaScript 基础题找找自信?

关注公众号 前端开发博客,领27本电子书

回复加群,自助秒进前端群

天天推送各种框架和库的,看起来也挺累的。。。今天放松一下,做几道 JavaScript 基础题找找自信吧!

第1题 — 原型

function Animal(){ 
  this.type = "animal"
}
   
function Dog(){ 
  this.name = "dog"
}
 
Dog.prototype = new Animal()
 
var PavlovPet = new Dog(); 
 
console.log(PavlovPet.__proto__ === Dog.prototype)
console.log(Dog.prototype.__proto__ === Animal.prototype)

console.log 打印出的值是?

第2题 — 小心“排序”

var arr = [5, 22, 14, 9];

console.log(arr.sort());

console.log 打印出的值是?

第3题 — 异步循环

for (let i = 0; i < 3; i++) {
  const log = () => {
    console.log(i)
  }
  setTimeout(log, 100)
}

console.log 打印出的值是?

第4题 — numbers里面有啥?

const length = 4
const numbers = []
for (var i = 0; i < length; i++);{
  numbers.push(i + 1)
}
 
console.log(numbers)

console.log 打印出的值是?

第5题 — 长度为0

const clothes = ['shirt', 'socks', 'jacket', 'pants', 'hat']
clothes.length = 0
 
console.log(clothes[3])

console.log 打印出的值是?

第6题 — 变量定义

var a = 1
function output () {
    console.log(a)
    var a = 2
    console.log(a)
}
console.log(a)
output()
console.log(a)

console.log 打印出的值是?

第7题 — 找到值了吗

function foo() {
    let a = b = 0
    a++
    return a
}
 
foo()
console.log(typeof a)
console.log(typeof b)

console.log 打印出的值是?

第8题 — 类型转换

console.log(+true)
console.log(!"ConardLi")

console.log 打印出的值是?

第9题 — ESM

// module.js 
export default () => "Hello world"
export const name = "c"

// index.js 
import * as data from "./module"

console.log(data)

console.log 打印出的值是?

第10题 — 对象做 key

const a = {};
const b = { key: "b" };
const c = { key: "c" };

a[b] = 123;
a[c] = 456;

console.log(a[b]);

console.log 打印出的值是?

答案 - 第1题

把原型的基础知识记清楚这道题就错不了:

所有的对象都有 [[prototype]] 属性(通过 _proto_ 访问),该属性对应对象的原型;所有的函数对象都有 prototype 属性,该属性的值会被赋值给该函数创建的对象的 _proto_ 属性。

答案是:

true
true

答案 - 第2题

抱歉,答案不是 [5, 9, 14, 22] 。如果不传入排序函数,sort 函数会将每个元素转换成字符串,然后根据它们的 UTF-16 值排序。

答案是:

[14, 22, 5, 9]

答案 - 第3题

这题我会,因为:

定时器是异步执行,浏览器会优先执行同步任务,在遇到定时器时会先把它们暂存在一个宏任务队列中,待当前宏任务队列的所有任务执行完毕后才会去执行队列中的任务,此时循环已执行完毕,i 已经是 3。

所以答案是:

0
1
2

哎不对?答案为啥不是 3、3、3

因为循环里的 i 是用 let 声明的,而不是用 var 声明的!

let 声明的变量拥有块级作用域。即在 for 循环或 if 中用 let 定义变量,在外面是访问不到的。

形如 for (let i...) 的循环在每次迭代时都为 i 创建一个新变量,并以之前迭代中同名变量的值将其初始化,所以上面的代码实际上相当于:

for (let i = 0) {
  const log = () => {
    console.log(i)
  }
  setTimeout(log, 100)
}
for (let i = 1) {
  const log = () => {
    console.log(i)
  }
  setTimeout(log, 100)
}
for (let i = 2) {
  const log = () => {
    console.log(i)
  }
  setTimeout(log, 100)
}

答案 - 第4题

要看仔细啊,看到小括号和大括号之间有个吗?

答案是:

[5]

答案 - 第5题

将数组的长度赋值为 0 就相当于从数组中删除所有元素。

答案是:

undefined

答案 - 第6题

  • 第一个输出:全局的 var a

  • 第二个输出:output 函数中声明的 var a变量提升,还未赋值

  • 第三个输出:output 函数局部作用域的 a 已赋值

  • 第四输出:全局的 var a 没有变

答案是:

1
undefined
2
1

答案 - 第7题

let a 是一个局部变量。typeof a 检查的是未声明的变量。

b 是个全局变量,它在 foo 函数中被赋值。

答案是:

undefined
number

答案 - 第8题

+ 运算符首先会尝试将 boolean 类型转换为数字类型,true 被转换为 1false 被转换为 0

字符串 'ConardLi' 是一个真值,所以 !'ConardLi' 为 false。

答案是:

1
false

答案 - 第9题

考察下你对 ES Module 的认识

答案是:

{ default: function default(), name: "c" }

答案 - 第10题

对象能做对象的 key 吗?当然不能,两次赋值实际上是:

a["Object object"] = 123;
a["Object object"] = 456;

答案是:

456

怎么样,找到自信了吗?💯💯💯 全对的来这里集合!!!

- EOF -

推荐阅读  点击标题可跳转

常用的前端JavaScript方法封装

刷算法题常用的JS基础扫盲

44道JS难题,做对一半就是高手

最后

我是小前端,欢迎大家围观我的朋友圈,搞搞技术,吹吹牛逼。我的微信:kujian89,秒添加,回复加群,可以进入 500人前端群。

b8faa2d0584dc6738e3b70763acc22ea.png

5eb7287761cdd0c8b88425c69d5dee09.png

关注公众号:前端开发博客

  1. 回复「小抄」,领取Vue、JavaScript 和 WebComponent 小抄 PDF

  2. 回复「Vue脑图」获取 Vue 相关脑图

  3. 回复「思维图」获取 JavaScript 相关思维图

  4. 回复「简历」获取简历制作建议

  5. 回复「简历模板」获取精选的简历模板

  6. 回复「加群」进入500人前端精英群

  7. 回复「电子书」下载我整理的大量前端资源,含面试、Vue实战项目、CSS和JavaScript电子书等。

  8. 回复「知识点」下载高清JavaScript知识点图谱

 👍🏻 点赞 + 在看 支持小编

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值