javascript 表达式和运算符 (二)
表达式是一种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 表达式和运算符 (二)相关推荐
- java犀牛书_犀牛书学习笔记(1):语法结构、数据类型和值、表达式和运算符...
把这三个部分写在一起,是因为这些和JAVA几乎相同,如果你有JAVA或者C的基础,可以快速阅读.这里只记录几个不一样的,需要记住的地方: 1.直接量概念:其实就是用具体值直接赋值来创建变量,比如&qu ...
- C语言表达式和运算符大学霸IT达人
C语言表达式和运算符大学霸IT达人 C语言中表达式会包含常量.标识符.运算符.最基础最简单的表达式就是常量表达式.单独的常量表达式是没有意义的.例如,3就是一个常量表达式,单独放在一处没有实际的意义. ...
- C#中的表达式和运算符
欢迎您成为我的读者,希望这篇文章能给你一些帮助. 前言 今天和大家一起学习下C#中的表达式和运算符,都是很基础的知识点. 在日常的编码过程中,对于表达式和运算符我们每天都在使用.比如像下面的代码 in ...
- CSharp(C#)语言_第六章(表达式和运算符)
表达式和运算符 6.1 表达式 6.2 字面量 6.2.1 整数字面量 6.2.2 实数字面量 6.2.3 字符字面量 6.2.4 字符串字面量 6.3 求值顺序 6.4 简单算术运算符 6.5 求余 ...
- CH4_表达式和运算符
表达式和运算符: *原始表达式 *对象和数组的初始化表达式 *函数定义表达式 *属性访问表达式 *调用表达式 *对象创建表达式 *运算符概述 *算术表达式 *关系表达式 *逻辑表达式 *赋值表达式 * ...
- JavaScript 基础知识 表达式和运算符
表达式的概念:将同类型的数据(如常量.变量.函数等),用运算符号按一定的规则连起来的.有意义的式子称为表达式 一.原始表达式 最简单的表达式,是表达式的最小单位.JavaScript中的原始表达式包含 ...
- JavaScript深入【表达式和运算符(上集)】你能过我8关js运算符的题目吗?
博主留言 (茗洋芳竹) 每一个高手成功之路,都要学会怎样与孤独打交道 .我是个傻孩子,孤独竟然是我的夫人,每天晚上都会坐在我旁边看我学习,写博客.马上要离开ASP.NET生涯,投奔PHP了,一切都是那 ...
- 第 4 章(表达式和运算符)(4.1~ 4.7)
表达式是JS中的一个短语,JS 解释器会将其计算出一个结果.程序中的常量是最简单的一类表达式.变量名也是一种简单的表达式,它的值就是赋值给变量的值.复杂表达式是由最简单表达式组成的. 将简单表达式组合 ...
- Java_表达式和运算符(算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和三元运算符)
Java_运算符和表达式 运算符 算术运算符:+.-.*./. %.++.-- 加法(+) 除法(/) 取余(%) 关系运算符:<.>.<=.>=.==.!= 逻辑运算符:&a ...
最新文章
- 使用putty上传文件
- java 二分搜索获得大于目标数的第一位_遇到「最值问题」还在无脑动态规划?二分法考虑一下呗
- 用Kotlin开发android平台语音识别语义理解应用
- mac 下 通过 brew 安装 MariaDB
- 二元运算符的运算符重载
- usb 1-5.2: device not accepting address 4, error -110问题解决方案
- 基于法律罪行知识图谱的智能预判与客服问答
- vb6 串口同时读取写入数据怎么避免冲突_分布式场景下的数据复制究竟怎么做...
- !!!SQL sever 函数表达
- python16进制字节序_Python-十六进制数据传递与接收
- [后端人员耍前端系列]AngularJs篇:使用AngularJs打造一个简易权限系统
- 一个简单的倒计时js插件
- 服务器宕机维护公告,服务器“宕机”的诊断方法
- 网页上为何出现连接超时,怎么解决呢?
- 408真题-2022
- windows和linux的路径分隔符问题
- 使用人性化的 Linux 防火墙 CFW 阻止 DDOS 攻击
- virtualbox中安装xp系统、安装oracle数据库到虚拟机的xp系统中、主机连接oracle、备份xp系统、oracle数据库的一些基本概念(学习oracle数据库的准备工作)-day01
- 微信H5页面禁用复制链接
- 决策树算法原理以及决策树规则生成方法