我们都知道js的基本类型有undefined,null,boolean,number,string;

当我们在进行基本数据类型的运算和比较时数据类型会根据运算符号和左右两边值的不同作如下转换:

  •  +  运算符
      当我们利用 + 运算符去对字符串和数字进行计算时加法运算符会自动把数字转换成字符串进行运算
      1. string+string
            "a"+"b"="ab"
            "1"+"2"="12"
       2. number+number
               1+2=3
            3. string+number
            "a"+1="a1"
               "1"+2="12"
  • -  , * , / ,因为这三种运算符的运算方式一样固写在了一起(进行如下验证)

           1. string(-  , * , /)string
                   "a"-"b"=NaN;     "a"*"b"=NaN;      "a"/"b"=NaN;
                ****当字符串为数字时上述运算符会把它先转换成数字再进行计算        
                    "1"-"2"=-1;       "1"*"2"=-1;         "1"/"2"=0.5;
              2. number(+,-  , * , /)number
                 在number之间计算时所有运算符都会遵循正常的数学算法进行计算
                 3. string(-  , * , /)number
                    "a"-1=NaN;           "a"*1=NaN;         "a"/1=NaN; 
                "1"-2=-1;             "1"*2=-1;         "1"/2=0.5;
                    有时会认为把数据类型换下位置会出现不同结果吗会不会在进行计算时候运算符会根据前面的运算类型去改变后面的类型那?
               1-"a"=NaN;
          ****因为在进行上述3种运算符运算时是不会像+运算符一样会对类型进行相应转换后再进行计算。

  •  >,< 运算符
       1. string(>,<)string
                "a">"b" false ;    "a"<"b" true ;
                "a">"1"  true;
                *** 都是字符串在进行比较时候字符串会根据自己的ascii码进行比较但同时要注意字符串在进行比较的时候是区分大小写的
                "a">"A"   false;    "A">"a" true;     
        2. number(>,<)number
                根据数学运算法则进行比较
             3. string(>,<)number
             1>"a" false;        1<"a"  false;
               1>"2" false;        1<"2" true;
                 ****当数字和字符串进行比较的时候都会强制转换成字符串进行比较。
             ****当Number('a')的时候会被转换成NaN,翻一下资料你就会知道NaN 与任何数进行比较返回的结果都为false;
  • ==和===
             1. string(==,===)string
                "a"=="a"  true ;    "a"==="a"  true ;
                "1"=="1"  true ;   "1"==="1" true ;
              2. number(==,===)number
                 1==1 true ;    1===1 true;
              3. string(==,===)number
                 a=="a"  true;        a==="a"  false;
                 1=="1"  true;         1==="1"  false;
                 ****在字符串和字符串,数字和数字类型比较不论==和===返回都为true,为什么字符串和数字类型进行比较会出现false?
                   在进行==比较的时候如果一个是数字另一个是字符串,先将字符串转换成数字,然后在进行比较。
                       ===在js被称作严格相等,在进行两值比较的时候不会进行类型转换当两值类型不同则他们不相等
                 ****在这里要注意:
                         null==undefind  true;          null===undefind  false;
                     NaN==NaN      false;           NaN===NaN       false;
                         NaN在与任何值进行比较的时候都为false;

     

JavaScript基本类型比较的更多相关文章

  1. JavaScript事件类型

    JavaScript事件类型 Web浏览器中可能发生的事件有很多类型.这里我将主要将下面几种常用的事件类型: UI事件 焦点事件 鼠标与滚轮事件 键盘与文本事件 复合事件 变动事件 HTML5事件 设 ...

  2. Flow: JavaScript静态类型检查工具

    Flow: JavaScript静态类型检查工具 Flow是Facebook出品的,针对JavaScript的静态类型检查工具.其代码托管在github之上,并遵守BSD开源协议. 关于Flow 它可 ...

  3. javascript 操作符类型隐性转换

    javascript 操作符类型隐性转换 (一).一元操作符只能操作一个值的操作符叫做一元操作符1.递增和递减操作符a. 在应用于一个包含有效数字字符的字符串时,先将其转换为数字值,再执行加减1的操作 ...

  4. javascript学习-类型判断

    javascript学习-类型判断 1.类型判断的的武器 javascript中用于类型判断的武器基本上有以下几种: 严格相等===,用来判断null,undefined,true,false这种有限 ...

  5. JavaScript的类型自动转换高级玩法JSFuck

    0 前言 最开始是不小心在微信公众号(程序员大咖)看到一篇JS的高逼格代码,然后通过里面的链接跳转到了JSFuck的wiki,就像顺着迷宫找宝藏的感觉,感叹JS的自动类型转换的牛逼. 1 样例 (!( ...

  6. 面向对象的JavaScript --- 动态类型语言

    面向对象的JavaScript --- 动态类型语言 动态类型语言与面向接口编程 JavaScript 没有提供传统面向对象语言中的类式继承,而是通过原型委托的方式来实现对象与对象之间的继承. Jav ...

  7. javascript 字典类型的使用

    javascript  字典类型的使用 1.使用Array: var arr = new Array(); arr["zs"] = "zhangsan"; ar ...

  8. javascript变量类型及作用域

    javascript变量类型及作用域 一.简介 变量类型 ECMAScript变量可能包含两种不同类型的数据值:基本类型和引用类型. 基本类型 基本类型指的是简单的数据段,5种基本数据类型:undef ...

  9. js课程 1-3 Javascript变量类型详解

    js课程 1-3  Javascript变量类型详解 一.总结 一句话总结:js对象点(属性方法),json对象冒号(属性方法).属性和方法区别只有一个括号. 1.json对象中的函数的使用? 函数名 ...

  10. JavaScript 基础类型,数据类型

    1.基础类型:undefined,null,Boolean,Number,String,Symbol Undefined类型:一个没有被赋值的变量会有个默认值undefined; Null类型:nul ...

随机推荐

  1. Oracle PLSQL笔记(过程的创建和及调用)

    过程(procedure): 用于在数据库中完成特定的操作或者任务.是一个PLSQL程序块,可以永久的保存在数据库中以供其他程序调用. 一.创建所需的表USERS create table users ...

  2. 新手教程:wordpress博客安装图文教导

    每一个建立博客的新朋友,当准备好域名和主机后,不知道怎么安装博客,我刚建立昆明SEO的时候,也费了很多时间,终于搭建成功,下面是我一步一步实战得来的总结. 第一步:域名解析,根据域名注册商不同,解析操 ...

  3. Log in Spring

    记录日志向来是企业级应用程序必须考虑的事情.早些年,一个项目一个日志功能或模块,然后有了log4j这样的产品.不知是log4j将记录日志做到了极致,或是技术含量不高,又或是经济利益不明显,它已成为了这 ...

  4. .net基础收集

    .net基础收集 最近的面试让我知道基础知识的重要性,而我也每天都在网上找一些基础题来看.其实面试无非都是一些理论基础,只有基础过关了,才会被问到技术性的问题,所以第一关一定要打好.下面是我收集的一些 ...

  5. Python Tutorial - Parse JSON Objects with Python

    This tutorial is copied from youtube.com Here is the link: http://www.youtube.com/watch?v=RXqo3lC-JP ...

  6. Physical Standby Database Failover

    1.物理standby failover 切换 故障转移时在一些糟糕的事情发生时执行的计划外事件,需要将生产库移动到DR站点.有意思的是,这时候人们通常忙来忙去,试图弄明白发生了什么,需要做些什么才能 ...

  7. Java synchronized 详解

    Java synchronized 详解 Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 1.当两个并发线程访问同一个对象object ...

  8. 开发一个微信小程序项目教程

    一.注册小程序账号 1.进入微信公众平台(https://mp.weixin.qq.com/),注册小程序账号,根据提示填写对应的信息即可.2.注册成功后进入首页,在 小程序发布流程->小程序开 ...

  9. Linux 内核源码中likely()和unlikely()

    ikely()与unlikely()在2.6内核中,随处可见,那为什么要用它们?它们之间有什么区别呢? 首先明确: if (likely(value))等价于if (value)if (likely( ...

  10. [ios2] 关于CGBitmapContextCreate【转】

    CGContextRef CGBitmapContextCreate ( void *data, size_t width, size_t height, size_t bitsPerComponen ...