zoukankan      html  css  js  c++  java
  • JavaScript中的一些小细节

    这篇博客用来记录下通过各种途径知道的一些JS的小细节。

    一、1 + undefined = NaN 而 1 + null = 1

    因为:undefined强转数字是NaN 而 null强转数字是+0,规则如下

    二、两个{}的比较

    console.log({}=={});//false  指针的比较,两个都是新对象,指向的位置不一样,所以为false

    console.log({}<{});//false  大小的比较,会将左右进行ToPrimitive操作,{}执行该操作之后得到的是一个表示该对象的字符串”[object Object]”,所以应该是相等

    console.log({}<={});//true  同上

    三、原型链中的基础类型不会被共享

    因为基础类型是不可变的,你所更改的基础类型的值,不过是将更改后的值放入到新的地址中,然后变量将指针指向新的地址。一旦更改了当前属性的指针所指向的地址,JS就会把这个属性从原型链中复制到此实例中。

    四、setTimeout的一些细节

    1、第一个参数可以是字符串,因为引擎内部是使用eval语句执行的

    2、时长最长为 2147483647毫秒(24.8天),因为浏览器内部使用32位带符号的整数来储存推迟执行的时间。

    五、箭头函数没有this,是引用的外层的this

    PS:同样的,arguments、super、new.target这三个变量也是引用的外层的

    比如在浏览器环境下

    let a = 1,b = {a:2};

    let f  = ()=>{console.log(this.a)};

    执行f.call(b);返回的还是1

    一下是另一个实例,将es6转换成es5之后的结果,这下你应该就明白为什么call没有用了。

    六、如果let b = new Object(a) 则 b === a

    可能是由于从其他语言带来的感觉,所以很多人都以为使用let b = new Object(a) ,则a为b的原型,其实不是,其实这个语句等于 let b = a; 

    七、x = 2 和 var x = 2的区别

    有些人声明变量的时候忘记写关键字了。这会导致什么后果呢?

    1、不会变量提升。

    2、可以使用delete删除

  • 相关阅读:
    c# winform treelistview的使用(treegridview)
    基于Windows服务的聊天程序
    .Net Core集成Office Web Apps(二)
    .Net Core集成Office Web Apps(一)
    .Net页面局部更新的思考
    C#下载歌词文件
    jquery导航栏
    Select2下拉框总结
    数位dp入门(内容一样,新版格式)
    我的emacs简易配置
  • 原文地址:https://www.cnblogs.com/baqiphp/p/7483415.html
Copyright © 2011-2022 走看看