什么是赋值表达式

赋值表达式就是利用赋值号(=) 将右值赋给左值的一个表达式, 很多人应该不知道,赋值表达式也和其他表达式一样,是有返回值的。

赋值表达式的返回值是多少

例如一个常规表达式 a=1 ,针对赋值表达式, 表达式的返回值就是他的右值本身,也就是说 a=1 的返回值是1,当然,在这个例子中,并没有一个变量接收这个返回值。

赋值表达式的应用

那么,这个特性如何进行实际应用呢?相信读者很快就能想到脑海里的一种骚操作: a=b=c=d=e=1 。 没错,这种写法是完全可以解释的: 赋值表达式是将右值赋值给左值,那首先:
e=1 返回值是1,接下来相当于d=1 以此类推,所有跟着的变量就全都是1了。

赋值表达式需要注意的地方

如果真的有这么好用,那也就不会有本篇文章了。最近因为这个技巧陷入了一个大坑。
因为这种写法用来初始化变量十分方便, 所以我写了类似 a=b=c=d=[] 的语句,这里的重点在于,赋值表达式的右值是一个对象类型(JS中数组也属于对象类型),后续对abcd分别进行push加内容,比如

a.push('a')
b.push('b')
c.push('c')
d.push('d')

却发现原本不属于一个变量的元素也被加进去了。比如这时打印d,会发现d是['a','b','c','d']
通过这样讲解下来或许很容易意识到这里犯了一个很基本的错误,那就是将对象赋值给变量时,变量保存的是对象的引用,而不是对象本身,所以其实上述四个变量全都引用了同一个数组,也就是说,a、b、c、d
都等于['a','b','c','d']

通过这次踩坑,也是彻底清楚了, 赋值表达式的返回值就是右值本身,而不是右值的克隆等形式

初始化变量的省力写法

上面这种利用赋值表达式返回值来初始化变量, 对于基本类型是完全ok的。而对于对象类型,相比一句赋值一个变量,可以用解构的形式快速赋值。

[a, b, c, d, e] = [[], [], [], [], []]

不过这种写法的缺点是,容易把一句写的很长,后续要维护更换变量或者什么情况的时候,不太方便。对应的办法是将变量分组进行多次解构赋值,或者直接干脆就一次只解构赋值部分变量:

[a.all, b.all, c.all] = [[], [], []]
[a.allID, b.allID, c.allID] = [[], [], []]

正确利用JS赋值表达式返回值相关推荐

  1. 【Kotlin】Lambda 表达式 ( 简介 | 表达式语法 | 表达式类型 | 表达式返回值 | 调用方式 | 完整示例 )

    文章目录 I . Lambda 表达式 简介 II . Lambda 表达式语法 III . Lambda 表达式类型 IV . Lambda 表达式返回值 V . Lambda 表达式调用 VI . ...

  2. Android WebView 调用JS方法获取返回值

    一.Android4.4+ 如果你项目的minSdkVersion 为4.4 以上,那么你可以直接通过WebView的evaluateJavascript()方法 拿到JS方法的返回值 webview ...

  3. js获取classname值_利用js获取元素class值的两种方法

    我们有时为了达到某种效果,需要以元素的class值为条件做判断. 我们如何利用JavaScript获取元素class的值?我们先看下面代码: x=document.getElementsByTagNa ...

  4. android 调用js怎么获取返回值_js 函数

    函数是一个特殊的对象 具名函数 function 函数名(形式参数1,形式参数2){ 语句 return 返回值 } 匿名函数 上门的具名函数,去掉函数名就是匿名函数 let a =function( ...

  5. js中函数返回值return

    全栈工程师开发手册 (作者:栾鹏) js系列教程4-函数.函数参数教程全解 函数返回值 1.所有函数都有返回值,没有return语句时,默认返回内容为undefined,和其他面向对象的编程语言一样, ...

  6. 拿到JS异步函数返回值的几种方式

    在我们的编码过程中,为了满足业务需求,经常需要获取JS异步函数的返回值.今天就来汇总一下拿值的几种方式. 1,通过回调函数的方式来拿返回值,这个想必大家不会陌生 function getSomethi ...

  7. c语言赋值运算返回值

    结论:赋值运算返回左值的引用.见下图:

  8. js 方法的返回值 return 用法探究

    大致可以分为2种情况 第一种: 有返回值 (1) 返回true const testFn = ()=>{ return true } const result = testFn() consol ...

  9. 利用栈求表达式的值_高一数学月考考点之函数的表达式详解

    函数表达式考点详解,教你轻松学函数 Hello,大家好,这里是摆渡学涯.很高兴在这里跟大家分享知识哦.这次课程我们来为大家讲一下函数表达式相关的考点,教你轻松学函数. 基本概念 什么是函数表达式呢?我 ...

最新文章

  1. MySQL 学习笔记 (它执行的步骤)
  2. 单片机 10种软件滤波方法的示例程序
  3. LeetCode—33. 搜索旋转排序数组
  4. 数据库杂谈(九)——事务管理
  5. 高效程序员的 7 项技能
  6. Oracle-BPM安装详解
  7. mybatis SqlMapConfig.xml properties
  8. 通俗易懂!视觉slam第五部分——slam数学表示二
  9. linux下intel安装教程,在64位Ubuntu下安装Intel Fortran 11
  10. 【python】google的经纬度定位查询API
  11. IIS 设备未就绪。
  12. mysql signal_[MySQL]MySQL的signal sqlstate
  13. 2021年山东省安全员C证模拟考试及山东省安全员C证作业模拟考试
  14. CC驻点你应该知道的事
  15. (转) Java多线程学习(吐血超详细总结)
  16. 部落动物:关于男人、女人和两性文化的心理学
  17. 实践 | Face-API实现人脸识别(附源代码)
  18. 【算法练习】字符串处理 poj2690:首字母大写
  19. ThinkPad X1 Carbon 安装Ubuntu 18.04到移动硬盘 教程指南
  20. “笨办法”学Python3,Zed A. Shaw,习题29+30

热门文章

  1. 如何设置qq邮箱服务器smtp
  2. 【iOS_GitHub】文档/文件查看器(支持本地或者其他app分享过来的word、excel、pdf、rtf等格式文件)
  3. 让你提前认识软件开发(51):VC++集成开发环境中Linux下Pclint工程的配置方法及常见错误修改
  4. 计算机考研复试C语言最强简单题资料
  5. EtherCAT理论学习笔记【三】——WKC和SM同步管理器
  6. Ubuntu使用总结-持续更新
  7. 如何招一个靠谱的前端
  8. 工业大数据漫谈1:大数据的由来
  9. ZFPlayer视频播放PC 安卓都可以正常 播放,iOS端只有声音没有画面(2)
  10. 怎样把一个PSD文件里的图层移到另一个PSD文件里