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

来源:互联网 发布:网络投放 编辑:程序博客网 时间:2024/05/22 01:26

JavaScript中的值类型与引用类型

数据类型 值/引用类型 备注 undefined 值类型 无值 number 值类型 boolean 值类型 string 值类型 字符串在赋值运算中会按照引用类型的方式来处理 function 引用类型 object 引用类型


在JavaScript中,“全等(===)运算符”用来对值类型/引用类型的实际数据进行比较和检查。按照约定,基于上述类型系统的运算中(以下所谓“值”,也包括undefined):

  • 一般表达式运算的结果总是值
  • 函数/方法调用的结果可以返回值或者引用
  • 值与引用、值与值之间即使等值(==),也不一定全等(===)
  • 两个引用之间如果等值(==),则一定全等(===)

从表面上来看,一个值应该与其自身“等值/全等”。但事实上,在JavaScript中存在一个例外:一个NaN值,与其自身并不等值,也不全等。

举几个栗子:

0 == "0" //true0 === "0" //false1 == true //true0 == true //false's' == 's' //truenew String('s') == new String('s') //false 这里都是引用

两种类型在函数调用时的区别

JavaScript中的值类型与引用类型,同其他通用高级语言一样,表达的含义是数据在运算时的使用方式:参与运算的是其值亦或其引用。因此在下面的示例中,不同的值类型通过相同的函数调用之后输出的是不同的结果。

//1function 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);//abcfunc(strTemp);//传入引用,修改toString属性会影响到后面的运算。console.log(strTemp);//Hello World!//2function addNum(num){    num+=num*2;    return num;}var num = 1;var result = addNum(num);console.log(num);//1console.log(result)//3//3function 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 0