9月阅读周·JavaScript权威指南:表达式和运算符,初始化表达式篇

举报
叶一一 发表于 2024/09/22 11:26:18 2024/09/22
【摘要】 背景去年下半年,我在微信书架里加入了许多技术书籍,各种类别的都有,断断续续的读了一部分。没有计划的阅读,收效甚微。新年伊始,我准备尝试一下其他方式,比如阅读周。每月抽出1~2个非连续周,完整阅读一本书籍。这个“玩法”虽然常见且板正,但是有效,已经坚持阅读八个月。已读完书籍:《架构简洁之道》、《深入浅出的Node.js》、《你不知道的JavaScript(上卷)》、《你不知道的JavaScri...

背景

去年下半年,我在微信书架里加入了许多技术书籍,各种类别的都有,断断续续的读了一部分。

没有计划的阅读,收效甚微。

新年伊始,我准备尝试一下其他方式,比如阅读周。每月抽出1~2个非连续周,完整阅读一本书籍。

这个“玩法”虽然常见且板正,但是有效,已经坚持阅读八个月。

已读完书籍《架构简洁之道》、《深入浅出的Node.js》、《你不知道的JavaScript(上卷)》、《你不知道的JavaScript(中卷)》、《你不知道的JavaScript(下卷)》、《数据结构与算法JavaScript描述》、《WebKit技术内幕》、《前端架构:从入门到微前端》、《秒懂算法:用常识解读数据结构与算法》

当前阅读周书籍《JavaScript权威指南》

原始表达式

最简单的表达式是“原始表达式”(primary expression)。原始表达式是表达式的最小单位——它们不再包含其他表达式。JavaScript中的原始表达式包含常量或直接量、关键字和变量。

直接量是直接在程序中出现的常数值。它们看起来像:

  1.23//数字直接量
  "hello"//字符串直接量
  /pattern///正则表达式直接量

JavaScript中的一些保留字构成了原始表达式:

  true//返回一个布尔值:真
  false//返回一个布尔值:假
  null//返回一个值:空
  this//返回"当前"对象

和其他关键字不同,this并不是一个常量,它在程序的不同地方返回的值也不相同。this关键字经常在面向对象编程中出现。在一个方法体内,this返回调用这个方法的对象。

最后,第三种原始表达式是变量:

  i//返回变量i的值
  sum//返回sum的值
  undefined//undefined是全局变量,和null不同,它不是一个关键字

当JavaScript代码中出现了标识符,JavaScript会将其当做变量而去查找它的值。如果变量名不存在,表达式运算结果为undefined。然而,在ECMAScript 5的严格模式中,对不存在的变量进行求值会抛出一个引用错误异常。

对象和数组的初始化表达式

对象和数组初始化表达式实际上是一个新创建的对象和数组。这些初始化表达式有时称做“对象直接量”和“数组直接量”。然而和布尔直接量不同,它们不是原始表达式,因为它们所包含的成员或者元素都是子表达式。数组初始化表达式语法非常简单,我们以此开始。

数组初始化表达式是通过一对方括号和其内由逗号隔开的列表构成的。初始化的结果是一个新创建的数组。数组的元素是逗号分隔的表达式的值:

  []//一个空数组:[]内留空即表示该数组没有任何元素
  [1+2,3+4]//拥有两个元素的数组,第一个是3,第二个是7

数组初始化表达式中的元素初始化表达式也可以是数组初始化表达式。也就是说,这些表达式是可以嵌套的:

  var matrix=[[1,2,3],[4,5,6],[7,8,9]];

JavaScript对数组初始化表达式进行求值的时候,数组初始化表达式中的元素表达式也都会各自计算一次。也就是说,数组初始化表达式每次计算的值有可能是不同的。

数组直接量中的列表逗号之间的元素可以省略,这时省略的空位会填充值undefined。例如,下面这个数组包含5个元素,其中三个元素是undefined:

  var sparseArray=[1,,,,5];

数组直接量的元素列表结尾处可以留下单个逗号,这时并不会创建一个新的值为undefined的元素。

对象初始化表达式和数组初始化表达式非常类似,只是方括号被花括号代替,并且每个子表达式都包含一个属性名和一个冒号作为前缀:

  var p={x:2.3,y:-1.2};//一个拥有两个属性成员的对象
  var q={};//一个空对象
  q.x=2.3;q.y=-1.2;//q的属性成员和p的一样

对象直接量也可以嵌套,比如:

  var rectangle={upperLeft:{x:2,y:2},
  lowerRight:{x:4,y:5}};

JavaScript求对象初始化表达式的值的时候,对象表达式也都会各自计算一次,并且它们不必包含常数值:它们可以是任意JavaScript表达式。同样,对象直接量中的属性名称可以是字符串而不是标识符(这在那些只能使用保留字或一些非法标识符作为属性名的地方非常有用):

  var side=1;
  var square={"upperLeft":{x:p.x,y:p.y},
  'lowerRight':{x:p.x+side,y:p.y+side}};

总结

表达式(expression)JavaScript中的一个短语,JavaScript解释器会将其计算(evaluate)出一个结果。程序中的常量是最简单的一类表达式。变量名也是一种简单的表达式,它的值就是赋值给变量的值。


作者介绍
非职业「传道授业解惑」的开发者叶一一。
《趣学前端》、《CSS畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏️ | 留言📝

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。