js基础语法之变量类型和计算
**变量类型与计算**
问题?(思考!!!)
1.typeof能判断的类型?
本题的考点:在于JS的变量类型
2.何时使用"=="何时使用"==="?
考点:强制类型转换
3.值类型和引用类型的区别?
通过解决以上的问题来学习JS的基础语法
首先我们先学习一下什么是变量类型?
变量类型分为:
1.值类型和引用类型
2.typeof 运算符
3.深拷贝
我们通过代码来了解什么是值类型和引用类型?
//值类型
let a=100
let b=a
a=200
console.log(b) //输出答案:100
相信一般了解js语法的都能知道答案但是我们需要知道底层代码到底是怎么传值的?因此我们就有一个对值类型的分析过程
--------------------------------------值类型的分析
-----------------------------------------栈
key | Value |
---|---|
a | 100 |
-----------------------------------------栈
key | Value |
---|---|
a | 100 |
b | 100 |
-----------------------------------------栈
key | Value |
---|---|
a | 200 |
b | 100 |
有这样通过表格就可以很清楚的知道值类型的底层是直接将值存在栈里面
然后我们再来看引用类型的赋值计算,通过比对就可一知道啊值类型与引用类型的区别:
//引用类型
let a = {age:20}
let b = a
b.age = 21
console.log(a.age) //输出值为:21
相信这道题很多同学都会算错,可能都会以为答案会是20,但是当我们知道了底层引用类型是怎么传值的就不会算错了
----------------------------------------------栈
key | Value |
---|---|
a | 内存地址1 |
内存地址1 | {age:20} |
---|---|
key | value |
----------------------------------------------------堆
----------------------------------------------栈
key | Value |
---|---|
a | 内存地址1 |
b | 内存地址1 |
内存地址1 | {age:20} |
---|---|
key | value |
----------------------------------------------------堆
----------------------------------------------栈
key | Value |
---|---|
a | 内存地址1 |
b | 内存地址1 |
内存地址1 | {age:21} |
---|---|
key | value |
----------------------------------------------------堆
这样一看大家都明白了引用类型是怎么传值的了,因为let a等于一个对象,而对象跟值不一样,有些对象太大,栈里面存不了,所以栈里面的value值是存一个内存地址,这个内存地址指向堆里面的value。因为a、b指向的内存地址是相同的,所以当b.age发生改变时,栈里面的内存地址没有改变,但是堆里面的value却是已经发生了改变。
常见的值类型有:
let a //undefined
const s = 'abc'
const n = 100
const b = true
const s = symbol('s')
常见的引用类型有:
const obj = {x:100}
const array = ['a','b','c']
const n = null //特殊的引用类型,指针指向空地址
//函数也是一种特殊的引用类型 ,但不用于存储数据 所以没有深拷贝、复制函数这一说
function fn(){}
今天主要是复习了值类型和引用类型的概念,下一节会把深拷贝的知识和typeof运算符整理一下。
本文地址:https://blog.csdn.net/User_version/article/details/107280471
上一篇: 腊月有哪些风俗