zoukankan      html  css  js  c++  java
  • 聊聊javascript的null和undefined

    只要是说到js的变量和数据类型,就脱不开null和undefined,这兄弟俩就是js的重要基础,不可不察,无数的同学们都用过放大镜多角度多批次地研究过这兄弟俩,真是深受欢迎。^-^

    js也真是怪异,有个null不够,还要折腾出个undefined。

    虽然被诟病,但这就是设计。

    在c#和java中,null就是表示空,没有分配内存。

    在js中的null采用Number(null)的结果是0,代表什么,代表这不是空,仅仅是空值,是没有值,它的数据类型是"object"。

    那么为了表示空,所以设计者搞了一个undefined,它有单独的数据类型就是"undefined"。

    使用Number(undefined)的结果是NaN,转换结果也能达到设计目的。

    造成这样的设计结果,表达式中的数据类型转换起了关键作用。

    未定义的变量或已定义的但未赋值的变量就表示空,就是undefined。

    undefined更多的是javascript本身使用。

    比如,码农要想删除一个对象的属性不是把这个属性赋上undefined,因为这样属性还是在,用hasOwnProperty检测一下这个属性还是存在,在有些逻辑需要判断的地方就会出问题,要是删除属性就前置delete。

    var o1={p1:'v1',p2:'v2'};
    o1.p2=undefined;
    o1.hasOwnProperty('p2'); //true

    要删除数组元素,为了没有副作用,那么就用splice。

    码农要是使用undefined来赋值就要想想清楚了。

    对于码农来说,更多的是使用null,可以将一个变量赋上空值,断开和对象实例的联系,保证垃圾回收,也可以以备该变量符号后续使用。

    null和undefined比较的时候也是坑坑坑

    null == undefined //true
    null == false //false
    undefined == false //false

    虽然怪异,但这就是结果,这就是设计。

    可查看ECMA-262的相关定义,规则定义链接1链接2

    END

  • 相关阅读:
    yolo_to_onnx ValueError: need more tan 1 value to unpack
    yolo_to_onnx killed
    C++ 实现二维矩阵的加减乘等运算
    Leetcode 1013. Partition Array Into Three Parts With Equal Sum
    Leetcode 1014. Best Sightseeing Pair
    Leetcode 121. Best Time to Buy and Sell Stock
    Leetcode 219. Contains Duplicate II
    Leetcode 890. Find and Replace Pattern
    Leetcode 965. Univalued Binary Tree
    Leetcode 700. Search in a Binary Search Tree
  • 原文地址:https://www.cnblogs.com/kongxianghai/p/6994429.html
Copyright © 2011-2022 走看看