【JavaScript】使用void 0替代undefined

news/2024/11/7 20:38:50/

在很多大厂的规范里面,有个非常奇葩的规定,不能直接使用undefined关键字,而应该使用void 0来替换undefined关键字;

void 0是什么意思?

void 是一个关键字,void后面可以跟一个表达式,不管void后面的表达式运算结果是多少(任意的一个表达式),最终整个表达式返回一个undefined的结果,所以void 后面写 0, 1, 2等等都可以,为了统一编程习惯,所以一般后面写0

输入

void 123213213213

输出

undefined

为什么要void 0替代书写undefined

之所以有这么奇葩的规定,是因为undefined本身就很奇葩,比如:

  • 定义变量null
    > v a r \color{DarkOrchid}{var} var n u l l \color{DarkOrchid}{null} null
    < Uncaught SyntaxError: Unexpected token 'null'

  • 定义变量true
    > v a r \color{DarkOrchid}{var} var t r u e \color{MidnightBlue}{true} true
    < Uncaught SyntaxError: Unexpected token 'true'

  • 定义变量undefined
    > v a r \color{DarkOrchid}{var} var u n d e f i n e d \color{MidnightBlue}{undefined} undefined
    < u n d e f i n e d \color{Gray}{undefined} undefined

为什么可以定义undefined为变量名称,从本质来说在特定的环境里面undefined不是一个关键字,它是全局对象window里面的一个属性

  1. 全局环境中undefined是window的属性,且为只读不能赋值,
  2. 函数(局部)环境中undefined可以被定义为变量
  • 读取window.undefined变量的值
    > w i n d o w . u n d e f i n e d \color{Black}{window.undefined} window.undefined
    < u n d e f i n e d \color{Gray}{undefined} undefined

  • 询问 undefined属性在不在window中,返回的是true
    > " u n d e f i n e d " \color{Brown}{"undefined"} "undefined" i n \color{DarkOrchid}{in} in w i n d o w \color{Black}{window} window
    < t r u e \color{MidnightBlue}{true} true

会造成什么样的影响?

由于它不是关键字,我可以定义一个变量,名字叫undefined,并且给他重新赋值,是不是意味着这个值不再是undefined

  • 定义变量undefined并赋值10
    > v a r \color{DarkOrchid}{var} var u n d e f i n e d = 10 ; \color{MidnightBlue}{undefined=10;} undefined=10;
    < u n d e f i n e d \color{Gray}{undefined} undefined

再次读取变量的值,结果还是undefined,这是因为虽然它是window的一个属性,但是这个属性是只读的

  • 读取undefined变量的值
    > u n d e f i n e d \color{Black}{undefined} undefined
    < u n d e f i n e d \color{Gray}{undefined} undefined

  • window.undefined赋值1234
    > w i n d o w . u n d e f i n e d = \color{Black}{window.undefined=} window.undefined= 1234 \color{MidnightBlue}{1234} 1234
    < 1234 \color{MidnightBlue}{1234} 1234

  • 再次读取window.undefined变量的值
    > w i n d o w . u n d e f i n e d \color{Black}{window.undefined} window.undefined
    < u n d e f i n e d \color{Gray}{undefined} undefined

在一个函数的环境里面,定义一个变量名字叫undefined,然后打印一下undefined,打印的时候使用的是局部变量的undefined,它的值为10

代码

function m(){var undefined=10;console.log(undefined);
}
m()

运行结果

10

这种情况下就会给我们的程序埋下隐患,中小型企业可能不在乎,觉得无所谓,一般没人会写这样的代码,但是大企业里面,即便是概率很低的事件,一旦发生造成了损失将是不可估量的,所以这些隐患,能够规避的尽量规避。怎么规避呢?有这么一条规则,当你要得到一个undefined值的时候,应该使用void 0,而不是undefined本身,这么一来就没问题了。

代码

function m(){var undefined=10;console.log(void 0);
}
m()

运行结果

undefined

哪怕你定义的变量名字就是undefined,也不会实际的影响到我要使用undefined的地方,比如我要返回一个undefined看他返回的是什么?

代码

function m(){var undefined=10;return void 0;
}
console.log(m());

运行结果

undefined

http://www.ppmy.cn/news/332458.html

相关文章

OMG--RTPS(Real Time Publish Subscribe Protocol)

OMG--RTPS&#xff08;Real Time Publish Subscribe Protocol&#xff09; 1 概述2 内容缩写DDS 有线协议的要求RTPS 有线协议The RTPS Platform Independent Model (PIM)The Structure ModuleThe Messages ModuleThe Behavior ModuleThe Discovery Module The RTPS Platform S…

超详细:实现 Swift 与 汇编(Asm)代码混编并在真机或模拟器上运行

功能需求 虽然现在  开发的绝对主角是 Swift 语言&#xff0c;不过我们也希望有时 Swift 能够调用小段汇编代码以完成特殊功能。 在本篇博文中&#xff0c;您将学到如下内容&#xff1a; Swift 与 汇编语言混编的基本原理&#xff1b;如何在模拟器中使用 Swift x64 汇编指…

python turtle绘图 中小学课堂教学 绘制一幅风景 太阳云朵 树

先看看成果图吧 非常适合教学使用&#xff0c;绘制不同图形的不同方法。 首先导入模块&#xff1a; import turtle t turtle.Turtle() t.speed(50) #蓝天 s turtle.Screen() s.bgcolor("#87cefa") 一、画太阳&#xff0c;可以使用2种方法&#xff1a; 1、第一种…

HTML:桂林山水风景Web界面设计

题目 代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title>桂林山水风景图片</title><meta name"author" content"huyiwei"><meta name"generator" content&q…

图片相似度算法比较一般流程

1、 缩放图片 将需要处理的图片所放到指定尺寸&#xff0c;缩放后图片大小由图片的信息量和复杂度决定。譬如&#xff0c;一些简单的图标之类图像包含的信息量少&#xff0c;复杂度低&#xff0c;可以缩放小一点。风景等复杂场景信息量大&#xff0c;复杂度高就不能缩放太小&am…

神舟笔记本“性能、娱乐、省电、安静”模式之间的区别

前言&#xff1a;主要是对比神舟笔记本电脑“性能、娱乐、省电、安静”模式之间的区别 工具及硬件 名称版本号电脑Z8D6 2.5k屏鲁大师6.1023.xxx 之所以使用鲁大师&#xff0c;主要是为了节省时间.另外仅仅只是为了做横向对比&#xff0c;不需要太专业的工具。 实验中有两个变…

Pyecharts 风景名胜区数据可视化分析

import pandas as pd import numpy as np # 使用read_csv()方法进行读取 scenery_file_path open(r风景名胜区.csv) scenery_data pd.read_csv(scenery_file_path) scenery_data省份名称总面积(平方公里)游客量(万人次)0北京十三陵123.0493.91北京八达岭55.0737.52北京石花洞…

【Pyhton TurtleArt】画一幅极简渐变风景图

代码如下&#xff1a; import turtle as tu import random as ra#天空 tu.colormode(255) tu.setup(515,315) tu.bgcolor(midnight blue) tu.speed(100)#云层 tu.color(dark slate blue) tu.pu() tu.pensize(5) tu.goto(ra.randint(-700,-258),128) tu.pd() tu.begin_fill() t…