怎么将系统时间赋给一个变量_[JS] 让人犯晕的JavaScript变量赋值

变量赋值

开始之前先来几个例子,确保起始点是晕的状态~ :P

00b87c3d271bfbe4e4128e0102729aa3.png

按理说,b = a后,a是啥值b就应该跟着是啥值了~


但,b结果是"apple",还是一开始赋值时a的值。

075a5531b8dd539427b934b9b8de175b.png

这回,b又不争气的跟着a变了,b.name结果是"banana"

07d25ef0f6dc801312ed6c227e56aeeb.png

这回b又坚持自己了,b.name结果是"apple"

37f58a325b21a874cf0763f38fb239ea.png

同样b的结果还是最开始的2,b到底是要闹哪样?!47f28fe56693b13fb954e8ab1532e576.png

======================开始解释的分割线==============================

其实b很无辜,这个要从ECMAScript的变量值类型说起~

类型共有两种:

基本类型 (primitive values) - 包括Undefined, Null, Boolean, Number和String五种基本数据类型。

引用类型 (reference values) - 保存在内存中的对象们,不能直接操作,只能通过保存在变量中的地址引用对其进行操作。

现在回来看第一个例子例1.1

86fd7f1baa27007cbefcef38eac2323b.png

"apple"是String类型,属于基本类型,这时值是这样储存的:

9e39f72e546f7c7bdfb06692987dfa7b.png

548700e5e9e705bf2dc62fa7864ca4c6.png

这时a的值被copy了一份赋给了b:

4b8d05faa1231577376c0e52e2a14d92.png

所以,从此a和b井水不犯河水,各自怎么修改都不会影响对方了~

再来看第二个例子例1.2

125bc23516f4973435b4745304e0083c.png

{name: "apple"}是一个Object,属于引用类型,赋值前后值是这样存储的:

089c0224ab5c0a888ca0ce5f95b4c43f.png

所以当a.name = "banana";时,修改的是大家共同指向的内存中的object的属性值,所以b.name的值也就跟着变了。

例1.3中,

7f75082e38573119baf58eb8e020fdb4.png

例1.4中,

96f6dd64f860487cc606914c1b404dc3.png

小总结,变量赋值时总是会copy一份的,如果是基本类型,copy的就是实际的值,如果是引用类型,copy的是指向Object的地址值,所以指向的还是同一个Object。

变量比较

顺手再来看看变量的比较~

eaff68336ca4dfb3d3d1a562d5390769.png

这个没问题,结果肯定是true。

那这个呢?

5637ac6c3a5e52ce5c9448908b6f37a2.png

虽然俩数组长一模一样,结果还是false。

其实原理还是一样,对于基本类型,比较的就是实际的值,而对于引用类型(Array也是一种Object),比较的是地址值,虽然两个数组内容是一样的,但它们在内存中是两个Object,地址是不一样,所以比较的结果是false。

编辑整理 丨诸葛逍遥

76544fe97028a6c4bf669e9045ae274a.png

1a48ffb0a9c6f9776d3507c228f27703.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值