JS中值类型与引用类型分析

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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值