我们都知道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. Gink掉过的坑(一):将CCTableView导入到lua中

    环境: 系统:win7 64位 cocos2dx:cocos2d-2.1rc0-x-2.1.3 Visual Studio: 2012 由于项目是用lua写的,需要将cocos2dx中的方法导入到lu ...

  2. C#私房菜[二][提供编程效率的技巧]

    AaronYang的C#私房菜[二][提供编程效率的技巧] 前言 我的文章简单易懂,能学到东西.因为复杂的东西,讲起来,好累.阅读者只是膜拜,学不到东西,就是没用的东西,好多文章都是看不下去.我写不出 ...

  3. 2013Esri全球用户大会之互操作和标准

    1:Esri在开源领域做过哪些工作? Esri一直以来就是开源技术的用户和支持者.我们相信,通过提供从上到下的开放平台可使我们的用户成为开发能力强大的解决方案的积极参与者.在现有技术形势下,我们正在将 ...

  4. crudandroidandroid——CRUD(在上一篇博客的基础上)

    废话就不多说了,开始... 1.Person package com.njupt.sqlite; public class Person { private Integer id; private S ...

  5. nginx反射理传apache配置 - cookie去哪儿了?

    在公司接手了个微信项目,由于微信环境下访问网站需要使用对外开放的域名,所以有相关问题,都是直接运维同事帮忙处理. 原理是这样: 方案一: 1. 将域名解析指向测试服务器的地址: 2. 开放相关端口访问 ...

  6. C#:using与.net对象销毁

    一 . 1.using 语句获取一个或多个资源,执行一个语句,然后处置该资源.     2.using 语句: using ( 资源获取 ) 嵌入语句 3.资源获取: 局部变量声明 表达式 资源是实现 ...

  7. ASP.NET Zero--11.一个例子(4)商品分类管理-数据检验

    虽然已经可以添加商品分类,但还需进行优化,比如:用户是否输入.输入字符串是否有格式限制等等. 打开添加分类按钮,名称不输入任何字符,直接保存,会发现列表添加一条空记录.在实际项目中,这是不允许出现的事 ...

  8. [Node.js]REPL(交互式解释器)

    摘要 REPL(Read Eval Print Loop:交互式解释器) 表示一个电脑的环境,类似 Window 系统的终端或 Unix/Linux shell,我们可以在终端中输入命令,并接收系统的 ...

  9. 【CSS学习笔记】整齐的表格

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...

  10. 线段树练习 3&&P3372 【模板】线段树 1

    题目描述 Description 给你N个数,有两种操作: 1:给区间[a,b]的所有数增加X 2:询问区间[a,b]的数的和. 输入描述 Input Description 第一行一个正整数n,接下 ...