表达式是一种JS短语,可使JS解释器用来产生一个值。

一、表达式

表达式分类

1、原始表达式

常量、直接量 (3.14,"test");

关键字 (null,this,true);

变量(i,k,j);

都属于原始表达式。

原始表达式和原始表达式可以复合成复合表达式,比如10*20;

2、初始化表达式

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

比如[1,2] 相当于new Array(1,2);

[1,,,4] 相当于[1,undefined,undefined,4]

{x:1,y:2}相当于 var o=new Object();o.x=1;o.y=2;

3、函数表达式

把函数赋值给一个变量:var fe=function(){};

把函数括起来直接调用:(function(){console.log('hello world');})();

4、属性访问表达式

var o={x:1};

o.x或者o['x']访问对象的属性叫属性访问表达式

5、调用表达式

函数名加上括号func()就是调用表达式。

6、对象创建表达式

new Func(1,2);

没有参数可以把括号直接省略new Object,表示创建一个空对象。

二、运算符

分类,安装操作数个数分类:

按功能分类:

展开介绍特殊运算符。

1、?:条件运算符

var val=true?1:2;     //val值为1

2、,逗号运算符

很少见。

var val=(1,2,3);    //val值为3

逗号表达式会从左到右依次计算表达式的值,最后会取最右边的值。

用逗号隔开表示每个表达式都会被计算,最终整个表达式的结果会取最右边的。

3、delete运算符【update20170506】

用来删除对象上的属性,比如delete obj.x;

从IE9开始有一个Object.defineProperty()方法可以设置一个configurable标签,并不是对象上的所有属性都可以被成功delete掉,configurable为true才能正常被delete。

delete运算符不能删除变量,不能删除参数,用来删除对象上configurable为true的属性

用var 声明的变量,挂在变量对象上,不能用delete删除
隐式声明的变量,相当于是Global对象的属性,可以用delete 删除

4、in运算符

判断对象里是否有key

in运算符要求第1个(左边的)操作数必须是字符串类型或可以转换为字符串类型的其他类型,而第2个(右边的)操作数必须是数组或对象。

5、instanceof,typeof运算符

new Object() instanceof Object  //true
typeof 100 === 'number' //true

instanceof基于原型链判断对象的类型

typeof返回字符串,用于原始类型或者函数。

6、new运算符

new创建构造器的一个实例。

7、this运算符

this在不同情况有不同值

8、void运算符

void是一元运算符,不管后面操作数是多少都会返回undefined.

9、运算符优先级

下面的表将所有运算符按照优先级的不同从高到低排列。参考MDN。

优先级 运算类型 关联性 运算符
19 圆括号 n/a ( … )
18 成员访问 从左到右 … . …
需计算的成员访问 从左到右 … [ … ]
new (带参数列表) n/a new … ( … )
17 函数调用 从左到右 … ( … )
new (无参数列表) 从右到左 new …
16 后置递增(运算符在后) n/a … ++
后置递减(运算符在后) n/a … --
15 逻辑非 从右到左 ! …
按位非 从右到左 ~ …
一元加法 从右到左 + …
一元减法 从右到左 - …
前置递增 从右到左 ++ …
前置递减 从右到左 -- …
typeof 从右到左 typeof …
void 从右到左 void …
delete 从右到左 delete …
14 乘法 从左到右 … * …
除法 从左到右 … / …
取模 从左到右 … % …
13 加法 从左到右 … + …
减法 从左到右 … - …
12 按位左移 从左到右 … << …
按位右移 从左到右 … >> …
无符号右移 从左到右 … >>> …
11 小于 从左到右 … < …
小于等于 从左到右 … <= …
大于 从左到右 … > …
大于等于 从左到右 … >= …
in 从左到右 … in …
instanceof 从左到右 … instanceof …
10 等号 从左到右 … == …
非等号 从左到右 … != …
全等号 从左到右 … === …
非全等号 从左到右 … !== …
9 按位与 从左到右 … & …
8 按位异或 从左到右 … ^ …
7 按位或 从左到右 … | …
6 逻辑与 从左到右 … && …
5 逻辑或 从左到右 … || …
4 条件运算符 从右到左 … ? … : …
3 赋值 从右到左 … = …
… += …
… -= …
… *= …
… /= …
… %= …
… <<= …
… >>= …
… >>>= …
… &= …
… ^= …
… |= …
2 yield 从右到左 yield …
yield* 从右到左 yield* …
1 展开运算符 n/a ... …
0 逗号 从左到右 … , …

可以看出!比instanceof优先级高。所以不能写!arr instanceof Array 要用括号括起来!(arr instanceof Array)。

点(.)运算符优先级》new带参数》函数调用()。

new Foo.getName();      //相当于new (Foo.getName)()
new Foo().getName();    //相当于(new Foo()).getName()
new new Foo().getName();    //相当于new ((new (Foo()).getName)()

new Foo().getName();

中成员访问点运算符优先级是最高的,因此先执行了.getName(),重点是在进行左侧取值的时候,

new Foo()可以理解为两种运算

  • new 带参数,即new Foo()
  • 函数调用先Foo()取值后再new

而new带参数的优先级高于函数调用,因此先执行了new Foo()得到Foo的实例对象再进行成员访问.getName。

参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Logical_Operators

本文作者starof,因知识本身在变化,作者也在不断学习成长,文章内容也不定时更新,为避免误导读者,方便追根溯源,请诸位转载注明出处:http://www.cnblogs.com/starof/p/6370906.html有问题欢迎与我讨论,共同进步。

转载于:https://www.cnblogs.com/starof/p/6370906.html

javascript 表达式和运算符 (二)相关推荐

  1. java犀牛书_犀牛书学习笔记(1):语法结构、数据类型和值、表达式和运算符...

    把这三个部分写在一起,是因为这些和JAVA几乎相同,如果你有JAVA或者C的基础,可以快速阅读.这里只记录几个不一样的,需要记住的地方: 1.直接量概念:其实就是用具体值直接赋值来创建变量,比如&qu ...

  2. C语言表达式和运算符大学霸IT达人

    C语言表达式和运算符大学霸IT达人 C语言中表达式会包含常量.标识符.运算符.最基础最简单的表达式就是常量表达式.单独的常量表达式是没有意义的.例如,3就是一个常量表达式,单独放在一处没有实际的意义. ...

  3. C#中的表达式和运算符

    欢迎您成为我的读者,希望这篇文章能给你一些帮助. 前言 今天和大家一起学习下C#中的表达式和运算符,都是很基础的知识点. 在日常的编码过程中,对于表达式和运算符我们每天都在使用.比如像下面的代码 in ...

  4. CSharp(C#)语言_第六章(表达式和运算符)

    表达式和运算符 6.1 表达式 6.2 字面量 6.2.1 整数字面量 6.2.2 实数字面量 6.2.3 字符字面量 6.2.4 字符串字面量 6.3 求值顺序 6.4 简单算术运算符 6.5 求余 ...

  5. CH4_表达式和运算符

    表达式和运算符: *原始表达式 *对象和数组的初始化表达式 *函数定义表达式 *属性访问表达式 *调用表达式 *对象创建表达式 *运算符概述 *算术表达式 *关系表达式 *逻辑表达式 *赋值表达式 * ...

  6. JavaScript 基础知识 表达式和运算符

    表达式的概念:将同类型的数据(如常量.变量.函数等),用运算符号按一定的规则连起来的.有意义的式子称为表达式 一.原始表达式 最简单的表达式,是表达式的最小单位.JavaScript中的原始表达式包含 ...

  7. JavaScript深入【表达式和运算符(上集)】你能过我8关js运算符的题目吗?

    博主留言 (茗洋芳竹) 每一个高手成功之路,都要学会怎样与孤独打交道 .我是个傻孩子,孤独竟然是我的夫人,每天晚上都会坐在我旁边看我学习,写博客.马上要离开ASP.NET生涯,投奔PHP了,一切都是那 ...

  8. 第 4 章(表达式和运算符)(4.1~ 4.7)

    表达式是JS中的一个短语,JS 解释器会将其计算出一个结果.程序中的常量是最简单的一类表达式.变量名也是一种简单的表达式,它的值就是赋值给变量的值.复杂表达式是由最简单表达式组成的. 将简单表达式组合 ...

  9. Java_表达式和运算符(算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和三元运算符)

    Java_运算符和表达式 运算符 算术运算符:+.-.*./. %.++.-- 加法(+) 除法(/) 取余(%) 关系运算符:<.>.<=.>=.==.!= 逻辑运算符:&a ...

最新文章

  1. 使用putty上传文件
  2. java 二分搜索获得大于目标数的第一位_遇到「最值问题」还在无脑动态规划?二分法考虑一下呗
  3. 用Kotlin开发android平台语音识别语义理解应用
  4. mac 下 通过 brew 安装 MariaDB
  5. 二元运算符的运算符重载
  6. usb 1-5.2: device not accepting address 4, error -110问题解决方案
  7. 基于法律罪行知识图谱的智能预判与客服问答
  8. vb6 串口同时读取写入数据怎么避免冲突_分布式场景下的数据复制究竟怎么做...
  9. !!!SQL sever 函数表达
  10. python16进制字节序_Python-十六进制数据传递与接收
  11. [后端人员耍前端系列]AngularJs篇:使用AngularJs打造一个简易权限系统
  12. 一个简单的倒计时js插件
  13. 服务器宕机维护公告,服务器“宕机”的诊断方法
  14. 网页上为何出现连接超时,怎么解决呢?
  15. 408真题-2022
  16. windows和linux的路径分隔符问题
  17. 使用人性化的 Linux 防火墙 CFW 阻止 DDOS 攻击
  18. virtualbox中安装xp系统、安装oracle数据库到虚拟机的xp系统中、主机连接oracle、备份xp系统、oracle数据库的一些基本概念(学习oracle数据库的准备工作)-day01
  19. 微信H5页面禁用复制链接
  20. 决策树算法原理以及决策树规则生成方法

热门文章

  1. 设计人员珍藏的在线处理图片的网址大集合
  2. 学习ccna,ccnp中如何提高英语问题
  3. 比较常用的25条Excel技巧
  4. 确定不来了解一下什么是 BIO NIO AIO 阻塞 非阻塞 同步 异步?
  5. 浮小麦升浮之气的本质
  6. intellij手动添加依赖jar包
  7. intellij出现dependency ‘xxx‘not found
  8. kaggle上面的score以及ROC_AUC数值咋回事
  9. redis的增加元素操作
  10. vba 压缩图片_1分钟批量处理100张图片,Word图片批量压缩/提取/居中统统搞定