个人对js理解

本文分享了个人对JavaScript的理解,包括作用域的概念,函数如何直接挂载到变量上,变量提升的规则,对象的键名特性(键名必须是字符串),以及深拷贝、浅拷贝的区别。同时,探讨了相等运算符`==`、`===`和`Object.is()`的用法,以及JavaScript中的连续赋值现象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

个人对js理解吧
1.作用域

var a = 1
(function(){
	a = 2
	console.log(a) // 2
})()

(function(){
	var a = 3
	console.log(a) // 3
	console.log(window.a) // 1
})()

2.函数直接挂载变量

var b = 10;
(function b(){
    b = 20;
    console.log(b);  
})();

由于b在b函数中,所以打印出来是b的函数
3.变量提升

var a = 10;
(function () {
    console.log(a)
    a = 5
    console.log(window.a)
    var a = 20;
    console.log(a)
})()

输出应该为undefined,10,20
4.对对象的理解

// example 1
var a={}, b='123', c=123;  
a[b]='b';
a[c]='c';  
console.log(a[b]);

---------------------
// example 2
var a={}, b=Symbol('123'), c=Symbol('123');  
a[b]='b';
a[c]='c';  
console.log(a[b]);

---------------------
// example 3
var a={}, b={key:'123'}, c={key:'456'};  
a[b]='b';
a[c]='c';  
console.log(a[b]);

由于对象的键名只能是字符串,如果键名是对象或者数组的时候,就会转成字符串
5.深拷贝,浅拷贝

function changeObjProperty(o) {
  o.siteUrl = "http://www.baidu.com"
  o = new Object()
  o.siteUrl = "http://www.google.com"
} 
let webSite = new Object();
changeObjProperty(webSite);
console.log(webSite.siteUrl);

6.对==,===,Object.is(),理解

let obj = {}, arr = [],obj1 = {}
let obj2 = obj
console.log(obj == obj1) // false
console.log(obj === obj1) // false
console.log(obj === obj2) // true
console.log(-0 === +0) // true
console.log(NaN === NaN) // false
console.log(Object.is(NaN,NaN)) // true
console.log(Object.is(-0,+0)) // false
console.log('' == null) // false
console.log(''== undefined) // false
console.log(''=== undefined) // false
console.log(null == undefined) // true
console.log(null === undefined) // false

7.js连续赋值

var a = {n: 1};
var b = a;  
a.x = a = {n: 2};
console.log(a.x);  
console.log(b.x);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值