JavaScript中的运算符和语句
一、JavaScript的运算符

a、基本的算术运算符(+、-、*、/、%)
-、*、/、%运算符会在必要的时候将操作数转换为数字,无法转换成数字的操作数将会转换成NaN,相应的运算结果也是NaN。
JavaScript中所有的数都是浮点型的,所以除法的运算结果也是浮点型的。5/2=2.5;
%运算符返回结果符号与被除数一致。-5%2=-1;5%-2=1
二元加法运算符可以对两个数字做加法运算,也可以连接字符串。两个操作数中只要一个是字符串或者可以转换是可以转成字符串的对象,则进行字符串连接。
两个操作数中有一个为对象时,日期对象通过toString()方法转换到原始值然后进行字符串连接。其他对象通过先valueOf()、toString()方法得到原始值和另一个操作数结合。
1 console.log(1+2+'2');//"32"
2 console.log(1+(2+'2'));//"122"
3 console.log(null+"1");//"null1"
4 console.log(null+1);//1
b、一元运算符(+、-,++、--)
一元运算符(+、-)把操作数转换成数字(或者NaN),并返回这个数值。++、--运算符的操作数是一个左值(只能出现在赋值运算符的左边)(变量、数组元素、对象属性)
1 console.log(+null);//0
2 console.log(-undefined);//NaN
3 var i=1,j=i++; //i=1;j=2
4 var i=1;j=++i; //i=2,j=2
c、关系运算符(返回结果总是布尔值)
==(相等)、!= 比较时允许类型转换
===(恒等) 、!== 不允许类型转化
===几个特例:null和undefined不相等、0和-0相等、NaN和任何数都不等(包括自己),两个引用指向同一个对象时相等。
== 几个特例:null==undefined,对象和字符串比较,调用valueOf()、toString()方法转成成原始值比较。日期对象调用toString()方法转换。
两个操作数类型相同的时候直接比较,两个操作数类型不同时转换成数字进行比较。
1 var now=new Date();
2 console.log(now==now.toString());//true
>、>=、<、<=比较的操作数可能是任意类型的,但是只有是数字、字符串才能比较(根据字符在Unicode编码表中的顺序)。两个操作数只要有一个不是字符串,则转换成数字比较。
对象的转换规则:先使用valueOf()获取原始值,赋值使用toString()方法。
Infinity比任何数都大、-Infinity比任何数都笑,0和-0相等,NaN和任何数比较都返回false;
1 console.log('one'<3);//false 'one'转成数字是NaN
2 console.log('1'<3);//true
d、in运算符
in运算符的左操作数是一个字符串或者可以转换成字符串。右操作数是一个对象。in运算符用来判断做操作数是不是对象的属性(包含原型上的 )。
1 var o={x:1,y:2};
2 console.log('x' in o);//true
3 console.log("toString" in o);//true
4 console.log('z' in o);//false
5
6 var arr=[1,3];
7 console.log(0 in arr);//true
8 console.log('3' in arr);//false
e、instanceof运算符
instanceof运算符的做操作数是对象,右操作数是构造函数。如果对象的原型是构造函数的prototype属性(包含父链),则返回true;
1 var o={x:1,y:2};
2 console.log(o instanceof Object);//true
f、逻辑运算符
&&、||、! (与或非) 当操作数都是布尔值时,返回的是布尔值
&&、||当操作数中有不是布尔值的,返回值不一定是布尔值;a&&b,当a是真的时候,直接返回b的值,当a是假的时候,直接返回 b;a||b,a为真,返回的a,a为假,返回b;
!运算符的结果总是布尔值,!!x可以用来判断x的真假。
if(a>b) a++;等价于 (a>b)&&(a++);
function(o,p){
p=p||{};//如果不给p传值,则p的值为空对象。
}
g、赋值运算符
var i=1;
a=b=0;//给多个变量赋值
a+=b//a=a+b 其他的类似
h、eval()函数
eval()是JavaScript中的全局函数,接受一个参数,如果参数不是字符串,直接返回参数,如果是字符串,字符串会被当成JavaScript源代码执行,编译失败会报错,编译成功执行改代码,并返回最后一条语句的值,如果最后的语句没有值,返回undefined。
eval('2+3');//5
i、其他运算符
1、三目运算符(第一个表达式的值为真,:前代码被执行,否则执行:后的代码)
1 x>0?x:-x; //求x的绝对值
2、typeof运算符
typeof是一个一元运算符,操作数可以是任意类型的。返回下列的一个字符串。

3、delete运算符
delete 运算符用来删除对象的属性,删除成功返回true;delete运算的属性时一个左值,如果不是左值,则返回true,不进行其他操作。
1 var o={x:2}
2 console.log(delete o.x);//true
3 console.log(o.x);//undefined
4、void运算符
void运算符是一个一元运算符,出现在操作数之前,操作数可以是任意类型,操作照常进行,但是会返回undefined。
1 var a=void 2;
2 console.log(a); //undefined
5,逗号运算符
逗号运算符是一个二元运算符,它会先计算左操作数,在计算右操作数,最终返回有操作数。
1 var i,j,k;
2 var a=(i=1,j=2,k=3);
3 console.log(a); //3
二、JavaScript中常见的语句.
JavaScript中的语句是以分号结束的,表达式计算出一个值,但语句用来执行以使某个事件发生。
a、空语句
空允许没有内容,只有分号,当创建一个具有空循环体的循环时,空语句很有用。
1 var arr=[];
2 //初始化一个数组
3 for(var i=0;i<4;arr[i++]=0){
4 ;
5 }
b、声明语句
1、var语句
var语句用来声明变量,可以一次声明一个变量,也可以一次声明多个变量。用var声明的全局变量无法通过delete运算符删除。
var i; //声明一个变量
var i=1,j=2;//声明多个变量并初始化
同时,var语句可以用在循环体内;
for(var i=0;i<3;i++){ }//相当于var i; for(i=0;i<3;i++){ }
for(var i in o){
console.log(i)
}
2、function
function关键字用来声明一个函数,函数可以写成表达式的形式;也可以写成语句的形式。
1 //语句
2 function abc(){
3
4 }
5 //表达式
6 var a=function(){
7
8 }
函数声明语句可以出现在最顶层代码中,也可以出现在函数体内。函数声明语句只能出现在函数的最顶层,函数定义不可以出现在while、if或其他循环语句中。
函数声明语句和表达式包含相同的函数名,但两者仍有区别 ,两者都创建了新的函数对象。但是函数声明语句中的函数名是一个变量,变量指向函数对象,函数定义语句被显式的提前到脚本或者函数的顶部,在整个脚本或函数中是可以见,var声明的函数,只有变量声明提前,函数必须在其后调用;
1 a();//报错
2 var a=function(){
3 console.log(123);
4 }
3、条件语句
if(表达式){
//true执行这个语句块
}else{
//false 执行这个语句块
}
switch语句

while语句
while(表达式){
//如果表达式的结果为真,一直执行该代码。
}
do/while语句
do{
//先执行一次,再根据表达式的值执行循环
}while(表达式);
for()循环
for(初始化变量的值;循环条件;变量重新赋值){
//先执行初始化,然后判断条件,重新赋值,然后判断条件,重新赋值。。。。
}
for/in
for(var p in object){
//遍历变量的可枚举属性(包含原型链上的 )
}
4、跳转语句
break
break语句用于跳出最内层循环或者switch语句。
continue
continue语句用于跳过本次循环,执行下一次循环。
return 语句
return语句用来指定函数调用时的返回值,return语句只出现在函数内部,当遇到return语句是,函数执行终止。如果return语句没有表达式,或者函数没有return语句,则调用时的返回值时undefined。
throw 语句,
throw语句用于显示抛出一个错误,如果找不到最近的异常处理程序,JavaScript会把异常当做程序错误处理。
throw expression中expression的值可以是任意类型的,可以抛出一个错误码数字或者一个可读的错误消息的字符串。
try/catch/finally语句
try/catch/finally语句用于捕获代码中的异常,finally中代码肯定会执行。
1 var a=function(){
2 try{
3 throw new Error('代码出现错误');
4 }catch(e){
5 console.log(e.message);
6 }
7 }
8 a();//'代码出现错误'
5、其他语句
with语句
with语句用来临时扩展作用域。
with(obj){
语句
}
把obj对象添加到作用域的头部。执行完代码块中的代码,把作用域链恢复原状。

"use strict"语句
"use strict" 对脚本和函数启动严格模式
JavaScript中的运算符和语句的更多相关文章
- JavaScript中逗号运算符
JavaScript中逗号运算符(,)是顺序执行两个表达式.使用方法: expression1, expression2 其中expression1是任何表达式. expression2是任何表达式. ...
- JavaScript学习系列7 -- JavaScript中的运算符
今天,我们来说一说JavaScript中的运算符,首先我们来讲一讲 一元运算符 JavaScript中的一元运算符有以下几种 1. delete delete 运算符主要用于删除对以前定义的对象属性或 ...
- (转)JavaScript中的运算符优先级
JavaScript中的运算符优先级是一套规则.该规则在计算表达式时控制运算符执行的顺序.具有较高优先级的运算符先于较低优先级的运算符执行.例如,乘法的执行先于加法. 下表按从最高到最低的优先级列出J ...
- JavaScript中“typeof”运算符与“instanceof”运算符的差异
在JavaScript中,运算符“typeof”和“instanceof”都可以用来判断数据的类型,那么这两个运算符有什么不同之处呢? 差异一:使用方式不同. 最明显的差异就是这两个运算符的使用方式了 ...
- JavaScript中的运算符种类及其规则介绍
JavaScript中的运算符有很多,主要分为算术运算符,等同全同运算符,比较运算符,字符串运算符,逻辑运算符,赋值运算符等.这些运算符都有一些属于自己的运算规则,下面就为大家介绍一下JavaScri ...
- javascript中算术运算符规则
javascript中提供了几种算术运算符,+(加) -(减) *(乘) /(除) %(余),常规用法与数学上的一致: 但还规定一些特殊规则: 注:JavaScript中保存数值的方式,可以 ...
- JavaScript中比较运算符的使用
比较运算符的基本操作过程是:首先对操作数进行比较,这个操作数可以是数字也可以是字符串,然后返回一个布尔值true或false. 在JavaScript中常用的比较运算符如下表所示. 例如,某商场店庆搞 ...
- JavaScript中字符串运算符的使用
字符串运算符是用于两个字符串型数据之间的运算符,它的作用是将两个字符串连接起来.在JavaScript中,可以使用+和+=运算符对两个字符串进行连接运算.其中,+运算符用于连接两个字符串,而+=运算符 ...
- 深入理解JavaScript中的==运算符
原文章地址 在详细介绍图1中的每个部分前,我们来复习一下JS中关于类型的知识: JS中的值有两种类型:基本类型.对象类型. 基本类型包括:Undefined.Null.Boolean.Number和S ...
随机推荐
- Python面向对象练习题
1.模拟栈操作原理 先进后出 1.初始化(创建一个存储数据的列表) 2.进栈使用列表保存数据 3.出栈 使用列表删除数据 4.查看栈顶元素 切片获取列表最后一位数据 5.判断是否为空栈 6 ...
- 周爱民带你深入剖析JavaScript核心原理
作为前端工程师必备技能,JavaScript 的重要性不言而喻.虽然易上手,但却有着诸多复杂微妙的机制,想要真正掌握绝非易事. 专栏面向JavaScript语言的实际应用者与深度爱好者,以讲述Java ...
- 17. Vue2.4+新增属性$listeners
现在我们来讨论一种情况,A组件与C组件怎么通信,我们有多少种解决方案? 我们使用VueX来进行数据管理,但是如果项目中多个组件共享状态比较少,项目比较小,并且全局状态比较少,那使用VueX来实现该功能 ...
- Java JFR 民间指南 - 事件详解 - jdk.ObjectAllocationInNewTLAB
重新申请 TLAB 分配对象事件:jdk.ObjectAllocationInNewTLAB 引入版本:Java 11 相关 ISSUES: JFR: RecordingStream leaks me ...
- Java编程语言学习01-编写第1个Java程序
JVM/JRE/JDK JVMJava虚拟机(Java Virtual Machine)它是运行所有Java程序的虚拟计算机有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上 ...
- JavaScript实现斐波那契数列
什么是斐波那契数列 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为&qu ...
- Redis持久化——AOF日志
最新:Redis内存--内存消耗(内存都去哪了?) 最新:Redis持久化--如何选择合适的持久化方式 最新:Redis持久化--AOF日志 更多文章... 上一篇文章Redis持久化--内存快照(R ...
- Bootstrap工具包--用于响应式布局和移动设备优先的web项目
Bootstrap是用于前端开发的工具包,是一个css/html框架 用于响应式布局和移动设备优先的web项目 响应式布局--一个网站能兼容多个终端 有很多版本:v3,v4,v5 三个没啥区别 ...
- Shell-日志按天切割
1.创建shell脚本: #!/bin/bash apphome=/apppath if [ ! -d $apphome ]; then exit 0 fi cp $apphome/app.log $ ...
- dedecms发布文章排序按发布时间,不是更新时间
织梦DEDECMS5.7这个版本存在一个问题,修改文章的同时也修改了文章的发布时间,这种情况下,如果我们调用最新文章时使用按"发布日期排序",就会打乱原来我们网站上的文章的顺序. ...