我们都知道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. sql 清除日志空间

    USE DBCenter GO SELECT file_id, name FROM sys.database_files; 查找日志名称 USE DBCenter ; GO ALTER DATABAS ...

  2. YARN之上的大数据框架REEF:微软出品,是否值得期待?

    YARN之上的大数据框架REEF:微软出品,是否值得期待?   摘要:微软即将开源大数据框架REEF,REEF运行于Hadoop新一代资源管理器YARN的上层.对于机器学习等在数据传输.任务监控和结果 ...

  3. ibatis实战之基础环境搭建

    关于ibatis的介绍.优缺点,以及ibatis和hibernate的比较再此不在赘述,可参阅其他资料. 一.准备工作 1.下载ibatis软件包http://download.csdn.net/de ...

  4. 两种高性能 I/O 设计模式 Reactor 和 Proactor

    两种高性能 I/O 设计模式 Reactor 和 Proactor Reactor 和 Proactor 是基于事件驱动,在网络编程中经常用到两种设计模式. 曾经在一个项目中用到了网络库 libeve ...

  5. js中的“闭包”

    js中的“闭包” 姓名:闭包 官方概念:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. ( ⊙o⊙ )!!!这个也太尼玛官方了撒,作为菜鸟的 ...

  6. PhoneGap+Xcode6环境配置

    安装PhoneGap,请先安装好NodeJS $ sudo npm install -g phonegap 创建项目 $ phonegap create my-app 编译项目 $ cd my-app ...

  7. 大数据应用日志采集之Scribe演示实例完全解析

    大数据应用日志采集之Scribe演示实例完全解析 引子: Scribe是Facebook开源的日志收集系统,在Facebook内部已经得到大量的应用.它能够从各种日志源上收集日志,存储到一个中央存储系 ...

  8. 用友CDM系统,将货位间商品移库单(一步)修改为内调出入库单(一步)方法使用

    客户一般只购买CDM供应链系统,但是只买供应链模块不能进行内调等操作,据说插件将近15万(坑爹~~~) 货位间商品移库单和内调差不多,区别是货位间移库默认只能选择登陆账号所属机构的货位. 解决方案:分 ...

  9. schemaeasyui实例:SSh结合Easyui实现Datagrid的分页显示

    查了好多资料,发现还是不全,干脆自己整理吧,最少保证在我的做法正确的,以免误导读者,也是给自己做个记载吧! 克日学习Easyui,发现非常好用,界面很雅观.将学习的心得在此写下,这篇博客写SSh结合E ...

  10. php的curl封装类

    之前一直做爬虫相关的,每次自己去写一系列curl_setopt()函数太繁琐,我于是封装了如下curl请求类. <?php /** * @author freephp * @date 2015- ...