每天一个前端冷知识系列:这个是JS中最难驯服的变量名,绝对让你体验不一样的感觉

我们都知道JS在使用时我们会存储很多的变量名方便调用,大多数情况我们会选择避免使用关键字或者保留字做为变量的名称,因为使用保留字的话会给你报个大大的红字,告诉咱们这个已经被我们占上了,你得换个变量名了。

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

 

虽然有一些变量可以赋值但是实际没有什么作用,比如window、top等等。

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

 

 

我们这次来聊的的这个变量名叫“name”,name在JavaScript中既不是关键字也不是保留字,在使用name作为变量名后会出现什么问题呢?

 

在控制台如果输入"name",可以看到,"name"是一个空的字符串然而我并没有定义name这个变量,他也不报错,为什么会默认赋值给空的字符串呢?

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

如果你想驯服这个变量是非常困难的,这个东西如果如果赋值是个对象,那么他将吐出来是个字符串。

 

如果你给他一个数字,那么它将给你吐出来一个数字,如果是一个数组会以字符串形式吐出来,如果给一个函数也是字符串形式吐出来,相信眼尖的同学已经找到规律了,这不就是自带个toString功能么?

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

 

但是如果你给他赋值是个数组,再用索引值查看他的话,他只会给你把第一个值给你,当我们感觉摸到规律时,这个结果又让我们摸不到头脑了。

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

 

这个东西其实是window的一个属性,简单来说就是window的名字,当name处于在window环境下就会有这样的结果发生,如果是局部变量就不会出现这样的问题,所以至于作者为什么要这么设计这个变量,我想还是那句解释:可能是历史遗留问题。

 

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值