Js高程第四章第一节 基本类型与引用类型二次学习

JS变量包括基本类型和引用类型

定义:
1.基本类型:简单的数据段(按值访问)可以操作保存在变量中的实际值
2.引用类型:一或多个值构成的对象 JS不允许直接访问内存 不能直接操作对象的内存空间
当复制保存着对象的某个变量时,操作的是对象的引用。但在为对象添加属性时,操作的是实际
的对象

1.动态属性
对比:

    let person = new Object() //引用类型
    person.name = 'ljh'
    console.log(person.name) //ljh

    let otherPerson = 'cjl'  //基本类型
    otherPerson.age = 20
    console.log(otherPerson.age)	//undefined  不会报错

结论:只能给引用类型值动态地添加属性

2.复制变量值
基本类型复制:

let num1 = 5
let num2 = num1

虽然两个变量值相同 但是num1中的5与num2中的5是完全独立的
num2只是num1中5的一个副本 如图表示复制过程:

引用类型复制:
在这里插入图片描述

    let obj1 = new Object()
    let obj2 = obj1
    obj1.name = 'ljh'
    console.log(obj2.name)    //ljh

引用类型复制同样也会将存储在变量对象中的值复制一份放到
为新变量分配的空间中 但是 不同:
这个值的副本实际上是一个指针,而这个指针指向存储在堆中的一
个对象。复制操作结束后,两个变量实际上将引用同一个对象。
因此,改变其中一个变量,就会影响另一个变量
过程如图:

在这里插入图片描述
3.传递参数
所有函数的参数都是按值传递
也就是说,把函数外部的值复制给函数内部的参数,就和把值从一个变量复制到另一个变量一样

基本类型:

    function addTen (num) {
      num += 10
      return num
    }
    let count = 20
    let result = addTen(count)
    console.log(count)			//20
    console.log(result)			//30

在函数内部,参数 num 的值被加上了 10,但这一变化不会影响函数外部的 count 变量。参数
num 与变量 count 互不相识,它们仅仅是具有相同的值

引用类型:

    function setName (obj) {
      obj.name = 'ljh'
      obj = {}
      obj.name = 'cjl'
      //证明obj为局部对象
      //console.log(obj.name)   //cjl
    }
    let person = {}
    setName(person)
    console.log(person.name)		//ljh

显示的值仍然是"ljh"。这说明
即使在函数内部修改了参数的值,但原始的引用仍然保持未变。实际上,当在函数内部重写 obj 时,这
个变量引用的就是一个局部对象了。而这个局部对象会在函数执行完毕后立即被销毁。

4.检测基本类型 typeof
typeof可以检测字符串,数值,布尔值,undefined返回对应类型
若是null或对象则返回object 无法检测具体引用对象的类型

4.2检测引用类型 instanceof

    let a = []
    let b = {}
    let c = 1
    console.log(a instanceof Array)				//true
	console.log(b instanceof Object)			//true
	console.log(c instanceof Object)         	//false
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值