美文网首页
JS指针理解之引用类型(含有运算符表格)

JS指针理解之引用类型(含有运算符表格)

作者: 木A木 | 来源:发表于2017-12-19 18:41 被阅读0次

对于我一个从事IT好几年的了人,心血来潮想写写前端,困难大大的,最近就碰到了JS引用类型指针的问题,网上各种找资料、看书,总算对这个类型的指针有了一定理解,遂赶紧记录下来巩固一下理解,先看一段简单代码,引用网友的代码块

<script>
    var a = {n:1}; 
    var b = a;  
    a.x = a = {n:2}; 
    console.log(a.x);// --> undefined 
    console.log(b.x);// --> [object Object] 
</script>

最初看到这个代码块以及所注释的输出打印我不会了,由于掌握的知识太少,下意识的觉得这个输出是错误的,在拷贝到开发者工具中测试后,输出是对的,那么是我哪里没有掌握?还是哪里理解错误呢?

首先我对这段代码分析了一下,虽然不算输出就短短3行代码,可也有几个知识点要掌握

  • 变量声明
  • 对象引用
  • 指针
  • js赋值以及运算符优先级

从上面4点我们说一下这个输出结果的过程:
第一行 var a = {n:1}; 声明变量 a 并将 {n:1} 对象赋值给 a
第二行 var b = a; 声明变量 b 并将 a 赋值给 b,此时 ba 的引用,


也就是我们看到上图中 ab 都指向到对象A,也就是 a 的所有属性 b 都可以使用,
第三行 a.x = a = {n:2};,从这行代码来看按照从右到左的顺序执行时没有问题的,但这里面有 a.x ,其中的.运算级别在这里是最高的,所以代码在执行过程中应该是下面这种情况:
    a.x //undefined 先执行a.x值为undefined,此时的a.x是指向上图中的对象A,也就是b是可以用x属性的

此时 ab 的状态是下面这样的:


接下来就是赋值运算符 = 的执行了
    a.x = a = {n:2};//进行从右到左的赋值操作

首先将 {n:2} 赋值给 a,此时的 a 已经不再指向对象A了,而是值为 {n:2} 的新对象B,


接下来将 a 也就是对象B赋值给 a.x ,上面讲到由于 a.x 最先执行后所指向是对象A,也就是说当前 x 与对象B没有关系
所以当执行完打印输出语句后得到的结果就是 a 所指对象B并没有 x 属性
    console.log(a.x);// --> undefined 
    console.log(b.x);// --> [object Object] 

下面两个表格是常用的算术运算符以及赋值运算符

JavaScript 算术运算符
算术运算符用于执行变量与/或值之间的算术运算。
给定 y=5,下面的表格解释了这些算术运算符:

运算符 描述 例子 结果
+ x=y+2 x=7
- x=y-2 x=3
* x=y*2 x=10
/ x=y/2 x=2.5
% 取余 x=y%2 x=1
++ 递加 x=++y,x=y++ x=6,x=5
-- 递减 x=--y,x=y-- x=4,x=5
- 负号 x=-y x= -5
+ 正号 x=+y x= 5
** x**y x= NaN

JavaScript 赋值运算符
赋值运算符用于给 JavaScript 变量赋值。
给定 x=10 和 y=5,下面的表格解释了赋值运算符:

运算符 例子 等价于 结果
= x=y x=5
+= x+=y x=x+y x=15
-= x-=y x=x-y x=5
*= x*=y x=x*y x=50
/= x/=y x=x/y x=2
%= x%=y x=x%y x=0

运算符优先级表格

运算符 描述
. [] () 字段访问、数组下表、函数调用以及表达式分组
++ -- + - ~ !delete new typeof void 一元运算符、返回数据类型、对象创建、未定义值等
* / % 乘法、除法、取模
+ - + 加法、减法、字符串连接
<< >> >>> 常用于二进制移位(位移运算只对整数有效,即使对浮点型数值进行位移运算,也只会对整数部分进行移位运算
== != === !== 等于、不等于、严格相等(值与类型都相等)、非严格相等
& 按位与
^ 按位异或
l 按位或
&& 逻辑与
1、&&左右都是布尔值
a&&b 只有前后都是true的时候才返回true,否则返回false。
2、&&两侧非全部是布尔值
①只要“&&”前面是false,无论“&&”后面是true还是false,结果都将返“&&”前面的值;
②只要“&&”前面是true,无论“&&”后面是true还是false,结果都将返“&&”后面的值。
ll 逻辑或
1、II两侧都是布尔值
aIIb只有前后都是false的时候才返回false,否则返回true。
2、II两侧非全部是布尔值
①只要“II”前面为false,不管“II”后面是true还是false,都返回“II”后面的值;
②只要“II”前面为true,不管“II”后面是true还是false,都返回“II”前面的值。
注:JS中 0、""(空字符)、null、false、undefined、NaN都会判为false,其他都为true,这个一定要记住,不然应用II和&&就会出现问题。
?: 条件,三目运算,a?b:c
= op = 赋值,运算赋值(包含上面赋值运算符表格全部)
, 多重求值,var a=2,b=3;

相关文章

  • JS指针理解之引用类型(含有运算符表格)

    对于我一个从事IT好几年的了人,心血来潮想写写前端,困难大大的,最近就碰到了JS引用类型指针的问题,网上各种找资料...

  • 每天总结一

    一、js总结一 js引入 js变量 值类型 引用值 运算符

  • C++ 引用

    一、引用的基本概念 引用在本质上就是指针, 只要与指针用法相对照,就很容易理解了 指针类型 引用类型 引用可以看作...

  • GreekBank极客班-Objective-C 类与对象

    Oc作为面向对象语言,即含有类型系统,主要包括引用类型和值类型 引用类型主要有:类,指针,块 值类型主要有:基础数...

  • go指针

    定义 &变量 取地址操作 引用运算符 *指针变量 取值操作 解引用运算符 指针变量必...

  • JavaScript 01 (JS引入/变量/数据类型/类型转换

    JS的引入及调试,常量,字面量,变量,JS中的数据类型,JS的运算符,JS的运算符之隐式类型转换,强制类型转换,M...

  • 指向指针的引用

    引用本身不是对象,因此不能定义指向引用的指针。但指针是对象,所以存在指针的引用。 要理解r的类型到底是什么,就简单...

  • iOS开发之Swift篇(8)—— 类和结构体

    目录 版本 结构体和类对比 类型定义 & 创建实例 结构体是值类型 类是引用类型 恒等运算符 指针 版本 Xcod...

  • 执行环境、作用域链

    理解基本类型和引用类型 基本类型 点击浏览JS的基本数据类型 引用类型 1.什么是引用类型引用类型的值是保存在内存...

  • 13.JS基础之变量类型和计算

    值类型和引用类型 值类型和引用类型的存储和拷贝方式都不懂,这里也可以理解深拷贝和浅拷贝的区别 typeof运算符 ...

网友评论

      本文标题:JS指针理解之引用类型(含有运算符表格)

      本文链接:https://www.haomeiwen.com/subject/fchiwxtx.html