JavaScript中的值类型与引用类型
| 数据类型 | 值/引用类型 | 备注 |
|---|---|---|
| undefined | 值类型 | 无值 |
| number | 值类型 | |
| boolean | 值类型 | |
| string | 值类型 | 字符串在赋值运算中会按照引用类型的方式来处理 |
| function | 引用类型 | |
| object | 引用类型 |
在JavaScript中,“全等(===)运算符”用来对值类型/引用类型的实际数据进行比较和检查。按照约定,基于上述类型系统的运算中(以下所谓“值”,也包括undefined):
- 一般表达式运算的结果总是值
- 函数/方法调用的结果可以返回值或者引用
- 值与引用、值与值之间即使等值(==),也不一定全等(===)
- 两个引用之间如果等值(==),则一定全等(===)
从表面上来看,一个值应该与其自身“等值/全等”。但事实上,在JavaScript中存在一个例外:一个NaN值,与其自身并不等值,也不全等。
举几个栗子:
0 == "0" //true
0 === "0" //false
1 == true //true
0 == true //false
's' == 's' //true
new String('s') == new String('s') //false 这里都是引用
两种类型在函数调用时的区别
JavaScript中的值类型与引用类型,同其他通用高级语言一样,表达的含义是数据在运算时的使用方式:参与运算的是其值亦或其引用。因此在下面的示例中,不同的值类型通过相同的函数调用之后输出的是不同的结果。
//1
function newToString(){
return 'Hello World!';
}
function func(val){
val.toString = newToString;
}
var str = 'abc';
var strTemp = new String(str);
func(str);//只传入了str的值,因此对它的toString修改是无意义的
console.log(str);//abc
func(strTemp);//传入引用,修改toString属性会影响到后面的运算。
console.log(strTemp);//Hello World!
//2
function addNum(num){
num+=num*2;
return num;
}
var num = 1;
var result = addNum(num);
console.log(num);//1
console.log(result)//3
//3
function setName(obj){
obj.name = 'Jack';
obj = new Object(); //创建一个新的对象,并且把新对象的地址赋值给obj,所以obj并不指向外面的obj。
obj.name = 'Jacky';
}
var obj = new Object();
obj.name = 'test';
setName(obj);
console.log(obj.name);//Jack
本文深入探讨JavaScript中值类型与引用类型的特性及其区别,包括它们如何在函数调用过程中表现不同,以及如何使用全等(===)运算符来比较这些类型的数据。
1205

被折叠的 条评论
为什么被折叠?



