为什么有的大厂,变量不能直接赋值undefined?
这个问题是我逛直播时看到一位大佬,在讲解前端开发JavaScript代码编写说道:“在大厂里var变量是不能直接赋值undefined的,而是要有void来赋值”。
???
我当时就纳闷了。这两种赋值效果不是一样的嘛?
var a = undefined;
var a = void 0;
a都是undefined。没区别呀!
当时大佬没有停下来细说,继续传授知识干货。但我可听不进了,一直的纠结这个问题,然后去各大网站寻找结果。最终皇天不负有心人,让我终于知道为什么了。
接下来我分享给大家:
首先让大家了解一下这个void是什么?
学习过C语言的同志们应该有一定的了解,在JavaScript中void是关键字,void后面跟着的是一个表达式,表达式可以随便是什么值。
void 0
void 1
void 'abc'
最终void都会返回一个undefined,void就是来制造一个undefined的,我们一般习惯上会把表达式写成0,但是大部分人不会这样写来赋值undefined。可是大厂就是要有这种方式来赋值。
来来来,重点来了!!!
仔细思考思考,研究研究,你就会发现大厂为什么是大厂了。
因为在JavaScript里面undefined不是关键字。
undefined是window的一个属性
window.undefined
我第一次看到并且知道以后整个人都傻了,突然感觉学的还不够“毒打”挨少了。我以为undefined是关键字,可undefined不是,但undefined应该要是的呀。为什么会不是呢?可能是JavaScript的作者Brendan Eich当年被资本压榨的太严重了吧,这一块设计的有缺陷。我还特意找了的这个还真是一个bug。undefined由于是window的一个属性,所以能干嘛呢?它是可以赋值的。
window.undefined = 1
有这样想法的同志们非常不错,但是这个属性是一个只读属性。因此,你对它赋值是没有意义的,得到的还是undefined。这样看来它是没有隐患的呀。哎,这样想的同志们就错了。它还真的有隐患,比方说我们写一个函数就要出问题了。
function a(){
var undefined = 1;
}
我们在函数里定义变量为undefined(因为undefined不是关键字是可以定义为变量名),而在函数里面定义了unfettered这个变量之后,我们在接下来的编写中再使用这个unfettered的时候,它用的就不是全局对象里面的那个undefined,用的就是这个变量undefined了,所以是这样子后边一赋值为undefined就要出问题了。
function a(){
var undefined = 1;
var a = undefined;
console.log(a);
}
现在我们再输出一下这个a,大家运行以后就会发现会输出一个结果1,会出现这样一个问题。
可能大家觉得没有人会这样写代码呀,因为要出问题的前提条件,要定义一个变量名为undefined没有人会这样写的。只要正常人都不会这样去做,所以说很多公司,就无所谓,甚至不会注意这个问题。但是大厂不一样,大厂不会这么看,因为大厂面向的是上忆的用户,大厂站着高位置越高大厂的影响就会越大自然责任就会越大。所以有的事是非常非常小概率,但是造成的影响结果是不能接受的。所以在大厂里面他们会尽力的去消除这些隐患。在业务上的事情,定要追求极致的严谨和仔细——这就是大厂。毕竟大厂的每一个代码规定都是前辈们踩过的坑嘛。
好了本次分享就到此为止,感谢同志们的阅读。记得点赞关注收藏,本文如有错误欢迎大家来评论区指出,谢谢!!!
为什么有的大厂,变量不能直接赋值undefined?相关推荐
- “睡服”面试官系列第三篇之变量的结构赋值(建议收藏学习)
目录 变量的解构赋值 1. 数组的解构赋值 2. 对象的解构赋值 3. 字符串的解构赋值 4. 数值和布尔值的解构赋值 5. 函数参数的解构赋值 6. 圆括号问题 7. 用途 变量的解构赋值 1. 数 ...
- 使用var声明的变量 和 直接赋值并未声明的变量的区别
在看JS高级程序设计时忽然想到这个问题,众所周知,直接赋值一个变量而为声明,会产生一个全局变量(或者说是全局对象的属性),但用var声明的变量 和 直接赋值而并未声明的变量 都有哪些区别呢,这是我在百 ...
- ECMAScript6学习笔记 ——let、const、变量解构赋值
let 不存在变量提升 通过let声明的变量仅在块级作用域内有效 不允许在同一个作用域内重复声明一个变量 防止值公用 var oUl = document.querySelectorAll('ul&g ...
- Go 学习笔记(26)— Go 习惯用法(多值赋值,短变量声明和赋值,简写模式、多值返回函数、comma,ok 表达式、传值规则)
1. 多值赋值 可以一次性声明多个变量,并可以在声明时赋值,而且可以省略类型,但必须遵守一定的规则要求. package main import "fmt"func main() ...
- 变量 常量 Python变量内存管理 赋值方式 注释
目录 变量 1.什么是变量 2.为什么有变量? 3.定义变量 4.变量的组成 5.变量名的命名规范 6变量名的两种风格 常量 Python变量内存管理 1.变量存哪儿? 2.Python垃圾回收机制 ...
- C/C++中的指针变量可以相互赋值,使得它们指向同一块地址空间
两个指针变量可以相互赋值吗? int *p, *q; p=q; 这样写是什么意思?是p指向q吗? 答:1.两个指针变量之间可以相互赋值,p和q都是int类型的指针. p=q表示将q所指向的int类型变 ...
- java 静态对象赋值_基于Java class对象说明、Java 静态变量声明和赋值说明(详解)...
先看下JDK中的说明: java.lang.Object java.lang.Class Instances of the class Class represent classes and inte ...
- java 定义变量时 赋值与不赋值_探究Java中基本类型和部分包装类在声明变量时不赋值的情况下java给他们的默认赋值...
探究Java中基本类型和部分包装类在声明变量时不赋值的情况下java给他们的默认赋值 当基本数据类型作为普通变量(八大基本类型: byte,char,boolean,short,int,long,fl ...
- 1.2编程基础之变量定义、赋值及转换 10 Hello, World 的大小
http://noi.openjudge.cn/ch0102/10/ #include <bits/stdc++.h> using namespace std; int main( voi ...
最新文章
- C语言面试题-这些简单的你能很快的写出来吗?
- yii2 设置的缓存无效,返回false,不存在
- 帝国CMS后台前台上传大小和类型限制的解决方法!
- python怎么导入大小字母_isort-用于对python导入的库按照字母进行排序的工具
- leetcode1299. 将每个元素替换为右侧最大元素
- 2台服务器负载均衡后synchronized_一篇有趣的负载均衡算法实现
- 响应式网页设计简单入门
- 为什么我一再强调说新手创业不适合再开淘宝店?
- IntelliJ Idea 常用快捷键 超实用!
- oracle tcp 上限,操作系统用户最大进程数限制maxuproc
- 微信小程序 宠物论坛1
- 计算机网络自学指南,简直太全了!
- android logo颜色渐变,华为悄然更新品牌Logo:无渐变色,更加扁平化
- Buuctf rar
- 常用的JavaScript位操作(Bitwise)
- 云安全将来时 | 云安全的发展与未来趋势
- Telegraf 简单使用介绍
- Bidirectional Machine Reading Comprehension for Aspect Sentiment Triplet Extraction 论文阅读
- QML和C++之间的数据类型转换
- Chrome的使用技巧
热门文章
- Centos7配置网络
- ubuntu运行Openvino出现 ModuleNotFoundError: No module named ‘openvino.model_zoo.model_api‘解决
- c语言iota怎么用,常量及iota的简单用法
- 实时大数据处理real-time big data processing (RTDP)框架:挑战与解决方案
- 把梳子卖给和尚的故事
- 为什么p元素内不能嵌套Div元素(随笔)
- 微型计算机汇编语言与接口技术答案,32位微机原理、汇编语言及接口技术教程课后习题答案.doc...
- 2022高级Android笔试总结,记录下我磕磕碰碰的三个月找工作经历
- 我去扒了杜蕾斯的微博
- MQ消息队列(三)RabbitMQ及Erlang安装过程中常见问题