zoukankan      html  css  js  c++  java
  • 您真的了解javaScript?(2)

    点击下面链接,来测测您的javaScript水平吧。

    JavaScript Puzzlers!

    11. 

    []==[]

    当两个值都是对象 (引用值) 时, 比较的是两个引用值在内存中是否是同一个对象。因为此 [] 非彼 [],  这是两个互不相关的空数组。

    从这个题引申另外一个:

    [] == ![] //true

    ==号引起隐式转换,js是这么干的:

    !优先级最高,先看 ![],它的结果是false,所以这个推导式变成 []==false 。==号有布尔值,false就会转换数字 0,true转换成1,于是 []==0. 此时一边是对象,一边是数字,==又把对象转换成原始值。

    先用valueOf()方法,[].valueOf() 还是 [] ;那就下一个办法,[].toString(), 返回 "", 空字符串是一个原始值。ok,现在要比较的就是  "" == 0 。(如果两个方法都得不到原始值,就会抛出一个TypeError)

    隐式转换的工作还没结束,当==号两边,一边是字符串,一个是数字时候,==号又把字符串转换成数字。空字符串""被转换成 0. 最终我们计算的就是 0 == 0,因此结果是true。

    而我们看三等号,就不会引发类型转换:

    [] === ![]
    //false

    妥妥的。

    12.

    var a = [0];
    if ([0]) {
      console.log(a == true);
    } else {
      console.log("wut");
    }

    解题思路同上。

    13. what a great fun...

    1 + - + + + - + 1

    相当于1+空格-空格+空格+空格+空格-空格+1;在js中空格是不参与计算

    14.

    var ary = Array(3);
    ary[0]=2
    ary.map(function(elem) { return '1'; });

    嗯,map()方法不对空数组进行调用。所以,结果是 ["1", undefined*2]

    15.

    function sidEffecting(ary) {
      ary[0] = ary[2];
    }
    function bar(a,b,c) {
      c = 10
      sidEffecting(arguments);
      return a + b + c;
    }
    bar(1,1,1)

    这题其实挺简单。结果是21,但是怎么用大白话解释出来呢...

    16.

    var x = [].reverse;
    x();

    实际上,我的chrome浏览器抛出一个TypeError。

    如果这样写:

    var x = [].reverse;
    x.call([1, 2]);

    就可以返回[2, 1]

    17.

    Number.MIN_VALUE > 0

    结果:true

    MIN_VALUE 属性是 JavaScript 中可表示的最小的数(接近 0 ,但不是负数)。它的近似值为 5 x 10-324

    18.

    [1 < 2 < 3, 3 < 2 < 1]

    用计算机的眼光来计算这个题:

    1<2 =>true;

    true < 3 => true转换成1,于是 1 < 3, 所以结果是 true。

    3 < 2 => false;

    false < 1 => false转换成0,于是 0 < 1,所以结果也是true。

    19.

    3.toString()
    3..toString()
    3...toString()

    原来3. 和 .3 都是js的合法数字。所以3.toString()实际就是(3.)toString(),自然会抛出一个TypeError。少一个点多一个点都是,抛出错误。

    20.

    var a = {}, b = Object.prototype;
    [a.prototype === b, Object.getPrototypeOf(a) === b]

    只有 Function 拥有一个 prototype 的属性,其他对象并没有. 所以 a.prototype 为 undefined.

    getPrototypeOf()方法返回对象的原型。

  • 相关阅读:
    项目跟踪管理三个部分
    Element-UI树形结构表格的操作
    简化代码的小知识点
    swiper在vue中正确的使用方法
    如何创建一个新的vue项目
    前端开发常用代码片段(下篇)
    前端开发常用代码片段(中篇)
    前端开发常用代码片段(上篇)
    移动端h5实现复制功能
    最全的页面初始化样式
  • 原文地址:https://www.cnblogs.com/dodocie/p/6747288.html
Copyright © 2011-2022 走看看