js两个对象比较是比较的堆内存地址吗?

JavaScript015

js两个对象比较是比较的堆内存地址吗?,第1张

是的,只有同内存地址的对象才能显示正确,{}=={}是两个非同内存地址,可以理解为,两边都是新的对象,占两个内存地址,

var a={}

var b=a

a==b//true

值传递仅仅传递的是值

引用传递,传递的是内存地址,修改后会改变内存地址对应储存的值。

用数组来举例就最清楚了,例如我们定义一个数组a[]={1,2}

那么a[0]=1,a[1]=2。

如果我们把数组a里的元素值作为参数传递,实际上只是进行了值传递,对数组本身没有影响

如果我们把 数组a的指针作为参数传递,那么假如处理的函数就可以直接修改数组a里的值。

代码实例:(只是写个大概的逻辑,语法可能有错误)

main()

{

int a[]={1,2}

test(a)

printf(a[0]) //此处打印的值是3, 这就是引用传递。

}

public void test(int b[])

{

b[0]=3

}

数组就是一组数据的集合

其表现形式就是内存中的一段连续的内存地址

数组名称其实就是连续内存地址的首地址

2、关于js中的数组特点

数组定义时无需指定数据类型

数组定义时可以无需指定数组长度

数组可以存储任何数据类型的数据(比如说一个元素保存整型,一个元素保存字符串型,这个在JS中是可以的)

js中创建数组的语法:

var arr = [值1,值2,值3]//隐式创建

var arr = new Array(值1,值2,值3)//直接实例化

var array = new Array(size)//创建数组并指定长度

JS中符号含义:

() 表示函数执行

[] 表示语法模拟,表示模拟Array类的实例(=new Array())

{} 表示语法模拟,表示模拟Object类的实例(=new Object())

// 表示语法模拟(正则对象),表示模拟RegExp类的实例(=new RegExp())

3、关于数组长度

数组对象.length

在js中,每一个数组对象都可以调用length属性,它表示数组对象下共有几个数组元素

示例:

var row = ['zhangsan','lisi','wangwu']

console.log('共有'+row.length+'个人')//输出: 共有3个人

var length = row.length//对数组进行遍历

for (var i=0i<lengthi++){

console.log(row[i])//输出: zhangsan lisi wangwu

}

4、for...in语句

在js中,数组不是数据类型,数组的数据类型其实就是对象

Js中的For.....in语句可以实现对一个对象的所有属性的遍历

也可以使用for...in语句实现对一个数组的所有元素的遍历

语法:

for( var i in array ){

}

原理:数组中有几个元素,for..in语句就循环执行多少次

var row = ['zhangsan','lisi','wangwu','xiaoqiang']

for (var i in row){

console.log(i + ':' + row[i] + '<br>')

}

// 输出结果为: 0:zhangsan 1:lisi 2:wangwu 3:xiaoqiang

5、文本下标

格式:

arr['key'] = value

在js中,文本下标的数组元素,不计入数组长度

以文本下标形式添加到数组,实际是以属性形式添加到数组对象中的。