一、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中的运算符和语句的更多相关文章

  1. JavaScript中逗号运算符

    JavaScript中逗号运算符(,)是顺序执行两个表达式.使用方法: expression1, expression2 其中expression1是任何表达式. expression2是任何表达式. ...

  2. JavaScript学习系列7 -- JavaScript中的运算符

    今天,我们来说一说JavaScript中的运算符,首先我们来讲一讲 一元运算符 JavaScript中的一元运算符有以下几种 1. delete delete 运算符主要用于删除对以前定义的对象属性或 ...

  3. (转)JavaScript中的运算符优先级

    JavaScript中的运算符优先级是一套规则.该规则在计算表达式时控制运算符执行的顺序.具有较高优先级的运算符先于较低优先级的运算符执行.例如,乘法的执行先于加法. 下表按从最高到最低的优先级列出J ...

  4. JavaScript中“typeof”运算符与“instanceof”运算符的差异

    在JavaScript中,运算符“typeof”和“instanceof”都可以用来判断数据的类型,那么这两个运算符有什么不同之处呢? 差异一:使用方式不同. 最明显的差异就是这两个运算符的使用方式了 ...

  5. JavaScript中的运算符种类及其规则介绍

    JavaScript中的运算符有很多,主要分为算术运算符,等同全同运算符,比较运算符,字符串运算符,逻辑运算符,赋值运算符等.这些运算符都有一些属于自己的运算规则,下面就为大家介绍一下JavaScri ...

  6. javascript中算术运算符规则

    javascript中提供了几种算术运算符,+(加)  -(减)  *(乘)  /(除)  %(余),常规用法与数学上的一致:  但还规定一些特殊规则: 注:JavaScript中保存数值的方式,可以 ...

  7. JavaScript中比较运算符的使用

    比较运算符的基本操作过程是:首先对操作数进行比较,这个操作数可以是数字也可以是字符串,然后返回一个布尔值true或false. 在JavaScript中常用的比较运算符如下表所示. 例如,某商场店庆搞 ...

  8. JavaScript中字符串运算符的使用

    字符串运算符是用于两个字符串型数据之间的运算符,它的作用是将两个字符串连接起来.在JavaScript中,可以使用+和+=运算符对两个字符串进行连接运算.其中,+运算符用于连接两个字符串,而+=运算符 ...

  9. 深入理解JavaScript中的==运算符

    原文章地址 在详细介绍图1中的每个部分前,我们来复习一下JS中关于类型的知识: JS中的值有两种类型:基本类型.对象类型. 基本类型包括:Undefined.Null.Boolean.Number和S ...

随机推荐

  1. .NET 开源配置组件 AgileConfig 初体验

    介绍 在微服务大行其道的今天,系统会被拆分成多个模块,作为单独的服务运行,同时为了集中化管理,我们还需要日志中心,配置中心等,很多开发人员可能更熟悉 ApolloConfig,这个组件功能也很完善,d ...

  2. 开源服务器设计总计(plain framework2020年总计)

    2020年注定会被历史铭记,世界遭受着一场前所未有的灾难,这种灾难到现在还在持续.还记得19年末的时候,那时候听到一点点消息,哪里想得到年关难过,灾难来的让人猝不及防.由于疫情防控,2020年感觉转瞬 ...

  3. Redis解读(2):Redis的Java客户端

    Redis的Java客户端 Redis不仅使用命令客户端来操作,而且可以使用程序客户端操作,其实配置和实现起来也非常容易. 现在基本上主流的语言都有客户端支持,比如Java.C.C#.C++.php. ...

  4. 记一次metasploitable2内网渗透之512,513,514端口攻击

    512,513,514端口都是R服务: TCP端口512,513和514为著名的rlogin提供服务.在系统中被错误配置从而允许远程访问者从任何地方访问(标准的,rhosts + +). 默认端口:5 ...

  5. ASP.NET Core扩展库之Http通用扩展

    本文将介绍Xfrogcn.AspNetCore.Extensions扩展库对于Http相关的其他功能扩展,这些功能旨在处理一些常见需求, 包括请求缓冲.请求头传递.请求头日志范围.针对HttpClie ...

  6. 日志收集之filebeat使用介绍

    此系列文章一共分为三部分,分为filebeat部分,logstash部分,es部分.这里会按照每天几百亿条的数据量来考虑,去设计.部署.优化这个日志系统,来最大限度的利用资源,并达到一个最优的性能.本 ...

  7. 老和尚给小和尚讲故事引发了Java设计模式:组合模式

    目录 示例 组合模式 定义 意图 主要解决问题 优缺点 安全式和透明式的组合模式 安全式的合成模式的结构 透明式的合成模式的结构 老和尚和小和尚的故事 示例 有一个绘图系统,可以描绘各种图形,假设现在 ...

  8. Cobalt-Strike Office宏利用与免杀

    1.打开Cobalt-Strike生产Office宏病毒. 首先需要设置监听器.因为钓鱼的目标比较单纯,在这里就不采用域前置技术. 然后使用攻击模块,生产Office宏病毒. 设置好监听器. 生成宏病 ...

  9. Think5之删除单条数据功能

    //删除单条学员信息 public function deleteStu(Request $request){ $stu_id = $request->param('id'); $result ...

  10. 【Java】Java中的四种对象引用

    从JDK1.2开始,Java中的引用类型分为四种,分别是: 1.强引用(StrongReference) 这种引用是平时开发中最常用的,例如 String strong = new String(&q ...