JavaScript中有多种数据类型,在实际工作中,不管是有意还是无意的,我们总能碰到不一样的数据类型值之间进行运算,或者我想从用户输入获得一个数字时,而用户却输入了一个字符串,这种时候就需要用到今天介绍的东西了——数据类型转换。JS中的数据类型转换主要分为两大类:显式类型转换,隐式类型转换。

一     显示类型转换

1、Number()

接受一个参数,并把它转换成数字。

如果参数包含数字和小数点以外的其他字符,则转换失败,返回NaN。下面是一些特殊值转换为数字的结果:

 Number(null);//
Number(undefined);//NaN
Number(true);//
Number(false);//
Number("");//

  2、parseInt()

接受两个参数,第一个参数会被转换成十进制整数,第二个参数是一个数字,规定第一个参数的进制,它是可选的,默认是10。

转换规则:

    a,首先判断第一个参数的数据类型,如果不是字符串或数字类型,则转换失败,直接返回NaN;

    b,若是数字,则原样返回;

    c,若是字符串,则从第一个非空白字符开始检测,直到遇到第一个非数字字符为止,然后返回前面的部分;

    d,如果正负号是第一个非空字符,那么可以识别正负号;

    e,不能识别小数点。

 parseInt("123");//
parseInt("-123");//-123
parseInt(123.123);//
parseInt(" 123");//
parseInt("123abc");//
parseInt("abc123");//NaN
parseInt(true);//NaN
parseInt(undefined);//NaN
parseInt(unll);//NaN
parseInt("");//NaN
11 parseInt(110,2);//6
12 parseInt(110,16);//272

  3、parseFloat()

接受一个参数,并把它转换成小数。如果正负号是第一个非空字符,那么可以识别正负号。和parseInt唯一不同的是,它可以识别第一次出现的小数点。

 parseFloat("123.123");//123.123
parseFloat("123.1.2.3");//123.1
parseFloat("123.123abc");//123.123

  4、toString()

用需要被转换成字符串的值调用toString()方法,格式:test.toString(),注意:数字不能直接调用,需要把数字赋值给变量调用。toString()方法的返回值都是字符串类型。

在转换数字时,可以接受一个数字类型作为参数,参数规定了转换后结果的进制。其他时候传参无效。

 var num = 10;
var a = num.toString();//"10"
var b = num.toString(2);//"1010"
var c = num.toString(8);//"12"
var d = num.toString(16);//"a"

  5、String()

接受一个参数,将它转换成字符串。任何东西传进去都能的到字符串类型的返回值。

 String(123);//"123"
String(123.123);//"123.123"
String(undefined);//"undefined"
String(null);//"null"
String(true);//"true"

  6、Boolean()

除undefined、null、0、NaN、“”(空串)、false转换成false外,其他任何东西都被转成true。

 Boolean(undefined);//false
Boolean(null);//false
Boolean(0);//false
Boolean(NaN);//false
Boolean("");//false
Boolean(false);//false

二  隐式类型转换

  

  1、isNaN()

    接受一个参数,判断参数是否是数字,是则返回false,否则返回ture。

    会触发隐式类型转换,先调用Number()把参数转换成数字类型。

 isNaN(123);//false
isNaN("123");//false
isNaN("");//false
isNaN("abc");true

  2、++/--(自增自减)和+/-(正负)

会触发隐式类型转换,先调用Number()把操作数转换成数字类型。

 var num = "123";
num ++;//
console.log(num);//

  3、+(数字和字符串相加时)

会触发隐式类型转换,先调用String()把操作数转换成字符串类型。

 var num = 12;
console.log("I'm " + num + "years old.");//"I'm 12 years old"
console.log(num + "12");//"1212"

  4、-、*、/、%

    会触发隐式类型转换,先调用Number()把操作数转换成数字类型。

 var num = 12;
console.log(num - 1);//
console.log(num * 1);//
console.log(num / 1);//
console.log(num % 1);//

   5、&&、||、!

    会触发隐式类型转换,调用Boolean()把每个操作数转换成布尔类型。

 123 && "abc";//"abc"
0 && "abc";//0
123 || "abc";//
0 || undefined;//undefined
!0;//true
!1;//false

  关于逻辑运算的返回值:当两个原始值进行逻辑运算时,与运算会返回第一个找到的能被Boolean()转换成false的操作数,否则返回最后一个操作数。或运算会返回第一个能被Boolean()转换成true的操作数,否则返回最后一个操作数。非运算将返回被Boolean()转换成布尔值后再取反的值。即非运算返回的不再是操作数的值,而是布尔值。

  

  6、>、<、<=、>=、==、!=(数字和字符串比较时)

    会触发隐式类型转换,先调用Number()把操作数转换成数字类型。

 123 > "122";//true
123 < "124";//true
123 >= "123";//true
123 <= "123";//true
123 == "123";//true
123 != "123";//false

最后有两个特别的:undefined == null 返回true;NaN == NaN 返回false。另外在做加法(+)运算时字符串优先,在做其他数学计算时,数字优先。

JavaScript之数据类型转换的更多相关文章

  1. JavaScript中数据类型转换总结

    JavaScript中数据类型转换总结 在js中,数据类型转换分为显式数据类型转换和隐式数据类型转换. 1, 显式数据类型转换 a:转数字: 1)Number转换: 代码: var a = " ...

  2. JavaScript的数据类型转换

    首先,由于JavaScript是弱类型语言(弱类型的语言的东西没有明显的类型,他能随着环境的不同,自动变换类型而强类型则没这样的规定,不同类型间的操作有严格定义,只有相同类型的变量才能操作,虽然系统也 ...

  3. js | JavaScript中数据类型转换总结

    转载 在js中,数据类型转换分为显式数据类型转换和隐式数据类型转换. 1, 显式数据类型转换 a:转数字: 1)Number转换: 代码: var a = “123”; a = Number(a); ...

  4. javascript中数据类型转换

    转换为数字: parseInt():转换为整数型数值:从下标0开始判断,若为数值型则继续直到遇到非数值,返回前面的整数值: 小数点无效,若0开始为非数值则返回NaN: 转换空字符串会返回NaN: 能转 ...

  5. JS 之 数据类型转换

          首先我们来简单了解一下JS中的数据类型,JavaScript拥有字符串.数字.布尔.数组.对象.Null.Undefiend 6中数据类型.同一时候,JavaScript拥有动态类型. 也 ...

  6. JavaScript中的数据类型转换

    本文中提到的“原始值”指的是undefined,null,Boolean,string和number. 本文中的对象是native对象,宿主对象(浏览器定义的对象)按照各自的算法转换. JavaScr ...

  7. JavaScript数据类型转换

    原文转自:http://javascript.ruanyifeng.com/grammar/conversion.html#rd JavaScript是一种动态类型语言,变量是没有类型的,可以随时赋予 ...

  8. 第一百二十七节,JavaScript,JSON数据类型转换,数据转换成字符串,字符串转换成数据

    第一百二十七节,JavaScript,JSON数据类型转换,数据转换成字符串,字符串转换成数据 学习要点: 1.JSON语法 2.解析和序列化 前两章我们探讨了XML的结构化数据,但开发人员还是觉得这 ...

  9. python 全栈开发,Day50(Javascript简介,第一个JavaScript代码,数据类型,运算符,数据类型转换,流程控制,百度换肤,显示隐藏)

    一.Javascript简介 Web前端有三层: HTML:从语义的角度,描述页面结构 CSS:从审美的角度,描述样式(美化页面) JavaScript:从交互的角度,描述行为(提升用户体验) Jav ...

随机推荐

  1. 使用docker快速搭建本地环境

    在平时的开发中工作中,环境的搭建其实一直都是一个很麻烦的事情 特别是现在,系统越来越复杂,所需要连接的一些中间件也越来越多. 然而要顺利的安装好这些中间件也是一个比较费时费力的工作. 俗话说" ...

  2. idea中pom如何加载jar包依赖

    1.需求分析    在特定需求的情况下,idea需要加载jar包,那么如何在idea中正确的配置jar依赖呢?今天博主就这个问题给大伙讲解下,希望对大伙有所帮助 2.实现方案①在工程src目录下新建l ...

  3. Jesus Is Here[递推]2015沈阳online

    题目链接https://nanti.jisuanke.com/t/41175 自从百度之星初赛一上自己做出来一道打表找规律的题之后,这种膨胀的感觉让我近乎丧失理智,今天这道题我死死盯了两三个小时硬是没 ...

  4. python+jinja2实现接口数据批量生成工具

    在做接口测试的时候,我们经常会遇到一种情况就是要对接口的参数进行各种可能的校验,手动修改很麻烦,尤其是那些接口参数有几十个甚至更多的,有没有一种方法可以批量的对指定参数做生成处理呢. 答案是肯定的! ...

  5. Docker学习总结(二)--Docker安装与启动

    注:笔者使用的环境为 CentOS 7.6,如果版本不一致可能会出现一些错误. 安装 Docker 1)将 yum 包更新到最新版本 sudo yum update 2) 安装需要的软件包 sudo ...

  6. unity之加载场景

    游戏中的Loading分为:静态Loading和动态Loading. 简单形象的做个比喻: 静态Loading可能就是一张背景图.而动态的Loading就是在读取的同时有一个东西在“转圈”. 1.静态 ...

  7. Codeforces 337D

    题意略. 思路: 本题着重考察树的直径.如果我们将这些标记点相连,将会得到大树中的一个子树.我之前只知道树内的点到直径上两端点的距离是最远的,其实,在 整个大树中,这个性质同样适用,也即大树上任意一点 ...

  8. SPOJ - VFMUL - Very Fast Multiplication FFT加速高精度乘法

    SPOJ - VFMUL:https://vjudge.net/problem/SPOJ-VFMUL 这是一道FFT求高精度的模板题. 参考:https://www.cnblogs.com/Rabbi ...

  9. J farm

    #include<iostream> #include<vector> #include<algorithm> #include<cstring> #i ...

  10. happen before 原则

    并发一直都是程序开发者绕不开的难题,在上一篇文章中我们知道了导致并发问题的源头是 : 多核 CPU 缓存导致程序的可见性问题.多线程间切换带来的原子性问题以及编译优化带来的顺序性问题. 原子性问题我们 ...