1. void 0是什么?為什么比undefined好用?

        共 2685字,需瀏覽 6分鐘

         ·

        2022-06-06 23:36


        點擊上方?前端陽光,關(guān)注公眾號

        回復加群,加入技術(shù)交流群交流群

        1一、void 0 === undefined ?true!why?

        源碼涉及到 undefined 表達都會被編譯成 void 0

        //源碼
        const?a:?number?=?6
        a?===?undefined

        //編譯后
        "use?strict";
        var?a?=?6;
        a?===?void?0;

        void 0 === undefined

        if(context?===?void?0)?return?fn;
        //等價于
        if(context?===?undefined)?return?fn;

        為什么呢?void文檔里面解釋道

        void 運算符通常只能用于獲取 undefined 的原始值,一般用void(0),等同于void 0,也可以使用全局變量 undefined 替代。

        那什么是void 0、void 0 有什么意義、與undefined有什么關(guān)系呢?我們一起來總結(jié)一下。

        2二、為什么不直接寫 undefined

        undefined 是 js 原始類型值之一,也是全局對象window的屬性,在一部分低級瀏覽器(IE7-IE8)中or局部作用域可以被修改。

        //IE5.5~8
        var?strangerUndefined?=?undefined;
        undefined?=?1;
        console.log(typeof?strangerUndefined?===?'number')?//?true

        undefined在js中,全局屬性是允許被覆蓋的

        //undefined是window的全局屬性
        console.log(window.hasOwnProperty('undefined'))
        console.log(window.undefined)
        舊版IE?可以改寫undefined
        //舊版IE
        var?undefined?=?'666'
        console.log(undefined)//666?直接覆蓋改寫undefined

        window.undefined在局部作用域中是可以被修改的 在ES5開始,undefined就已經(jīng)被設(shè)定為僅可讀的,但是在局部作用域內(nèi),undefined依然是可變的

        //window.undefined在局部作用域中是可以被修改的
        ??var?testUndefined?=?function?()?{
        ??????var?obj?=?{}
        ??????var?undefined?=?'underscore'
        ??????var?window?=?{
        ??????????'undefined':?'bb'
        ??????}
        ??????console.log(window)
        ??????console.log(undefined)
        ??????console.log(window.undefined)
        ??????console.log(obj.name?===?undefined)
        ??????console.log(obj.name?===?window.undefined)
        ??????console.log(obj.name?===?(void?0))
        ??}
        testUndefined()

        3總結(jié)

        以上的栗子證明如果想要知道一個變量是否等于undefined的時候,判斷不嚴謹,存在風險;undefined全局屬性可以被修改,這樣會導致判斷undefined存在風險。

        4三、void 0

        (1)void 是一元運算符

        void 運算符對給定的表達式進行求值,然后返回undefined

        (2)語法

        void?expression

        (3)描述

        這個運算符能向期望一個表達式的值是undefined的地方插入會產(chǎn)生副作用的表達式

        void 運算符通常只用于獲取 undefined的原始值,一般使用void(0)(等同于void 0)。在上述情況中,也可以使用全局變量undefined 來代替(假定其仍是默認值)

        (4)void 后跟著表達式,表達式中的語句會全部執(zhí)行

        思考一下為什么void 66+99是NaN?為什么void (66+99)是undefined。

        這是因為 void 66+99沒有加括號,代碼從左到右執(zhí)行,void 66 是 undefined—undefined + 99是NaN

        (5)void 返回值永遠是undefined

        ????var?a?=?void?0
        ????console.log(a)

        ????var?a?=?console.log('hello?world')
        ????console.log(a)

        ????var?a?=?void?alert('I?am?a?girl')
        ????console.log(a)

        ????var?a?=?void(66?+?99)
        ????console.log(a)

        (6)void后面跟含有g(shù)etter屬性的函數(shù),會進行調(diào)用執(zhí)行語句,不會返回值

        ????var?dd?=?{
        ????????a:?66,
        ????????get?view()?{
        ????????????console.log(this.a);
        ????????????return?this.a++;
        ????????}
        ????}
        ????var?cc?=?void?dd.view?//?66??void?會執(zhí)行計算
        ????cc?//?undefined
        ????dd.a?//?67

        5四、為什么要用void 0 替代undefined

        ①某些情況下用undefined判斷存在風險,因undefined有被修改的可能性,但是void 0返回值一定是undefined

        ②兼容性上void 0 基本所有的瀏覽器都支持

        ③ void 0比undefined字符所占空間少。?————————————————

        版權(quán)聲明:本文為CSDN博主「傲嬌味的草莓」的原創(chuàng)文章 原文鏈接:https://blog.csdn.net/weixin_45709829/article/details/123795909





        往期推薦


        優(yōu)秀文章匯總:https://github.com/Sunny-lucking/blog

        內(nèi)推:https://www.yuque.com/peigehang/kb

        技術(shù)交流群


        我組建了技術(shù)交流群,里面有很多?大佬,歡迎進來交流、學習、共建?;貜?加群?即可。后臺回復「電子書」即可免費獲取?27本?精選的前端電子書!回復內(nèi)推,可內(nèi)推各廠內(nèi)推碼



        ???“分享、點贊、在看” 支持一波??


        瀏覽 143
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
          
          

            1. 欧美性爱小说网 | 精品无码一区二区三区在线 | 哦┅┅快┅┅用力啊┅护士少妇 | 爱搞搞就搞搞网站 | 少妇呻吟白浆高潮啪啪69 |