快来试试js的一些可能也许大概会掉坑里的常见输出题

第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)   // true
    console.log(Dog.prototype.__proto__ === Animal.prototype) //true
    题解:_proto_ 每个对象下都有这给属性 ,他指向我们构造函数的原型对象。

第2题 — 小心“排序” 

 var arr = [5, 22, 14, 9];
    console.log(arr.sort());
    抱歉,答案不是 [5, 9, 14, 22] 。如果不传入排序函数,sort 函数会将每个元素转换成字符串,然后根据它们的 UTF-16 值排序。
    解决 console.log(arr.sort((a,b)=>a-b));

第3题 — 异步循环

  for (let i = 0; i < 3; i++) {
      const log = () => {
        console.log(i)      // 0 1 2 
      }
      setTimeout(log, 100)
    }
    哈哈哈 是不是一下掉坑里了(我会这不就是同步任务和异步任务吗? 输出3 3 3)可是你注意到我是用let声明的变量吗?
    let 声明变量是块级作用域。即在 for 循环或 if 中用 let 定义变量,在外面是访问不到的。
    相当于:每一次的循环在每次迭代时都为 i 创建一个新变量。

第4题 — numbers里面有啥?

 const length = 4
    const numbers = []
    for (var i = 0; i < length; i++); {
      numbers.push(i + 1)
    }
    console.log(numbers) [5]
    这太简单了吧,不就是输出[1,2,3,4]嘛 要看仔细啊,看到小括号和大括号之间有个 ;吗?

 第5题 — 长度为0

    const clothes = ['shirt', 'socks', 'jacket', 'pants', 'hat']
    clothes.length = 0
    console.log(clothes[3]) //undefined
    没坑 就是undefined ,将数组的长度设成 0 等价于把数组中的所有值都删除了。

第6题 — 变量提升

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

    变量提升(只提升变量的声明,不提升变量的赋值) 函数提升
    等价于下面代码

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

第7题 — 找到值了吗

function foo() {
      let a = b = 0
      a++
      return a
    }

    foo()
    console.log(typeof a)  // undefined 
    console.log(typeof b)  // number
   // let a 是一个局部变量 在函数外未被声明 所以typeof a 检查的是未声明的变量。
   // b 是个全局变量,它在 foo 函数中被赋值。

第8题 — 类型转换

   console.log(+true)  // 1
   console.log(!"LOVEcoding") // false

    //+ 运算符首先会尝试将 boolean 类型转换为数字类型,true 被转换为 1,false 被转换为 0。
    // 字符串 'ConardLi' 是一个真值,所以 !'LOVEcoding' 为 false。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值