一、隐式类型转换
隐式类型转换会自动根据运算符进行类型转换。隐式类型转换的情况主要有以下几种。

  1. 如果表达式中同时存在字符串类型和数字类型的操作数,而运算符使用加号+,此时 JavaScript 会自动将数字转换成字符串。例如:

  2. 如果表达式运算符为-、*、/、%中的任意一个,此时 JavaScript 会自动将字符串转换成数字,对无法转换为数字的则转换为 NaN。例如:

  3. 运算符为++或–时,JavaScript 会自动将字符串转换成数字,对无法转换为数字的则转换为 NaN。例如:
    var num1 = “6”;
    var num2 = “6”;
    var num3 = “a”;
    alert(++num1); //将字符串转换为数字再进行++运算,结果为:7
    alert(–num2); //将字符串转换为数字再进行–运算,结果为:5
    alert(++num3); //字符串无法转换为数字,结果为:NaN

  4. 运算符为>或<时,当两个操作数一个为字符串,一个为数字时,JavaScript 会自动将字符串转换成数字。例如:
    alert(‘10’>9); //将字符串转换为数字,按值进行比较,结果为:true
    alert(‘10’<9); //将字符串转换为数字,按值进行比较,结果为:false

  5. !运算符将其操作数转换为布尔值并取反。例如:
    alert(!0); //对0取反,结果为:true
    alert(!100); //对非0数字取反,结果为:false
    alert(!“ok”); //对非空字符串取反,结果为:false
    alert(!""); //对空字符串取反,结果为:true

  6. 运算符为==时,当表达式同时包含字符串和数字时,JavaScript 会自动将字符串转换成数字。例如:
    var a = ‘2’;
    var b = 2;
    alert(a == b); //按值比较,结果为:true

二.、强制类型转换
从上面的介绍我们可以看到,JavaScript 可以自动根据运算的需要进行类型的转换。强制类型转换主要针对功能的需要或为了使代码变得清晰易读,人为地进行类型的转换。在 JavaScript 中,强制类型转换主要是通过调用全局函数 Number()parseInt()parseFloat() 来实现。

  1. 使用Number()函数将参数转换为一个数字
    使用格式如下:
    Number(value)

Number() 对参数 value 进行整体转换,当参数值中任何地方包含了无法转换为数字的符号时,转换失败,此时将返回 NaN,否则返回转换后的数字。

Number() 对参数进行数字转换时,遵循以下一些规则:
如果参数中只包含数字时,将转换为十进制数字,忽略前导 0 以及前导空格;如果数字前面为-,-会保留在转换结果中;如果数字前面为+,转换后将删掉+号;
如果参数中包含有效浮点数字,将转换为对应的浮点数字,忽略前导 0 以及前导空格;如果数字前面为-,-会保留在转换结果中;如果数字前面为+,转换后将删掉+号;
如果参数中包含有效的十六进制数字,将转换为对应大小的十进制数字;
如果参数为空字符串,将转换为 0;
如果参数为布尔值,则将 true 转换为 1,将 false 转换为 0;
如果参数为 null,将转换为 0;
如果参数为 undefined,将转换为 NaN;
如果参数为 Date 对象,将转换为从 1970 年 1 月 1 日到执行转换时的毫秒数;
如果参数为函数、包含两个元素以上的数组对象以及除 Date 对象以外的其他对象,将转换为 NaN;
如果在参数前面包含了除空格、+和-以外的其他特殊符号或非数字字符,或在参数中间包含了包括空格、+和-的特殊符号或非数字字符,将转换为 NaN。

转换示例:
alert(Number(“0010”)); //去掉两个前导0,结果为:10
alert(Number("+010")); //去掉前导0和+,结果为:10
alert(Number("-10")); //转换后保留“-”号,结果为:-10
alert(Number(’’)); //空字符串的转换结果为:0
alert(Number(true)); //布尔值true的转换结果为:1
alert(Number(null)); //null值的转换结果为:0
var d = new Date(); //创建一个Date对象
alert(Number(d)); //转换Date对象,结果为1970.1.1至执行转换时的毫秒数:1511351635179
alert(Number(“100px”)); //参数中包含了不能转换为数字的字符px,结果为:NaN
alert(Number(“100 01”)); //参数中包含了空格,导致整个参数不能转换,结果为:NaN
alert(Number(“100-123”)); //参数中包含了“-”,导致整个参数不能转换,结果为:NaN
var a; //声明变量
alert(Number(a)); //变量a没有赋值,因而a的值为undefined,转换undefined的结果为:NaN
var fn = function (){alert(1);}; //创建一个函数对象
alert(Number(fn)); //转换函数,结果为:NaN
alert(Number(window)); //转换window对象,结果为:NaN
从上述示例中,我们也可以看到,Number() 是从整体上进行转换的,任何一个地方含有非法字符,都将导致转换无法成功。接下来将介绍的两个函数与 Number() 不同的是,转换是从左到右逐位进行转换,任何一位无法转换时立即停止转换,同时返回已成功转换的值。

  1. 使用parseInt()函数将参数转换为一个整数
    使用格式如下:
    parseInt(stringNum,[radix])

stringNum 参数为需要转换为整数的字符串;radix 参数为 2~36 之间的数字,表示 stringNum 参数的进制数,取值为 10 时可省略。

parseInt() 的作用是将以 radix 为基数的 stringNum 字符串参数解析成十进制数。若 stringNum 字符串不是以合法的字符开头,则返回 NaN;解析过程中如果遇到不合法的字符,将马上停止解析,并返回已经解析的值。

parseInt() 在解析字符串为整数时,遵循以下规则:
解析字符串时,会忽略字符串前后的空格;如果字符串前面为-,-会保留在转换结果中;如果数字前面为+,转换后将删掉+号;
如果字符串前面为除空格、+和-以外的特殊符号或除 a~f(或 A~F)之外的非数字字符,字符串将不会被解析,返回结果为 NaN;
在字符串中包含了空格、+、-和小数点“。”等特殊符号或非数字的字符时,解析将在遇到这些字符时停止,并返回已解析的结果;
如果字符串是空字符串,返回结果为 NaN。

转换示例:
alert(parseInt(“1101”,2)); //以2为基数的1101字符串解析后的结果为:13
alert(parseInt(“a37f”,16)); //以16为基数的a37f字符串解析后的结果为:41855
alert(parseInt(“123”)); //以10为基数的123字符串解析后的结果为:123
alert(parseInt(" 123")); //字符串前面的空格会被忽略,结果为:123
alert(parseInt(“12 3”)); //字符串中包含了空格,解析到空格时停止,结果为12
alert(parseInt(“12.345”)); //字符串中包含了小数点,解析到小数点时停止,结果为12
alert(parseInt(“xy123”)); //字符串前面包含了非数字字符“x”,无法解析,返回结果为:NaN
alert(parseInt(“123xy4”)); //字符串中包含了非数字字符“xy”,解析到“x”时停止,结果为:123
从上述示例我们可以看到,parseInt() 解析浮点数时,小数部分数据会被截掉,此时需要使用下面将介绍的 parseFloat(),而不能使用 parseInt()。

  1. 使用parseFloat()函数将参数转换为一个浮点数
    使用格式如下:
    parseFloat(stringNum)

stringNum 参数为需要解析为浮点型的字符串。

parseFloat() 的作用是将首位为数字的字符串转解析成浮点型数。若 stringNum 字符串不是以合法的字符开头,则返回 NaN;解析过程中如果遇到不合法的字符,将马上停止解析,并返回已经解析的值。

parseFloat() 在解析字符串为整数时,遵循以下规则:
解析字符串时,会忽略字符串前后的空格;如果字符串前面为-,-会保留在转换结果中;如果数字前面为+,转换后将删掉+号;如果字符串前面为小数点.转换结果会在小数点前面添加 0;
如果字符串前面为除空格、+、-和。以外的特殊符号,字符串将不会被解析,返回结果为 NaN;
在字符串中包含了空格、+和-等特殊符号或非数字的字符时,解析将在遇到这些字符时停止,并返回已解析的结果;
在字符串中包含两个以上为小数点时,解析到第二个小数点时将停止解析,并返回已解析的结果;
如果字符串是空字符串,返回结果为 NaN。

转换示例:
alert(parseFloat(“312.456”));//结果为:312.456
alert(parseFloat("-3.12"));//字符串前面的“-”将保留,结果为:-3.12
alert(parseFloat("+3.12"));//字符串前面的“-”将保留,结果为:3.12
alert(parseFloat(".12"));//在小数点前面添加0,结果为:0.12
alert(parseFloat(" 3.12"));//截掉字符串前面的空格,结果为:3.12
alert(parseFloat(“312.4A56”));//字符串中包含非数字字符A,解析到A时停止,结果为:312.4
alert(parseFloat(“31 2.4A56”));//字符串中包含空格,解析到空格时停止,结果为:31
alert(parseFloat(“31.2.5”));//字符串中包含两个小数点,解析到第二个小数点时停止,结果为:31.2
alert(parseFloat(“a312.456”));//字符串前面为非数字字符a,解析无法进行,结果为:NaN

JS强制类型转换和隐式类型转换相关推荐

  1. js类型转换(隐式类型转换显式类型转换)

    我们需要了解任何计算都只能在相同的数据类型之间执行.如果我们强制JavaScript执行执行一些操作,例如在字符串中添加一个数字,在这种情况下,js编译器会默认将数字更改为字符串类型,然后将两者连接起 ...

  2. js条件判断时隐式类型转换

    Javascript 中,数字 0 为假,非0 均为真 在条件判断运算 == 中的转换规则是这样的: 如果比较的两者中有布尔值(Boolean),会把 Boolean 先转换为对应的 Number,即 ...

  3. 关于显式类型转换以及隐式类型转换

    哈喽嗷,铁汁们,咱们又见面了.是我嗷,一个不正经楼主. 首先提出一点,关于这个小细节专栏,看了绝对没好处(滑稽) 咳咳,咱们言归正传. 目录 隐式类型转换 ①算术运算中的隐式转换 规则一:字符和整数的 ...

  4. 显式类型转换和隐式类型转换区别?

    一般情况下,数据的类型的转换通常是由编译系统自动进行的,不需要人工干预,所以被称为隐式类型转换.但如果程序要求一定要将某一类型的数据转换为另外一种类型,则可以利用强制类型转换运算符进行转换,这种强制转 ...

  5. 显示类型转换和隐式类型转换

    显示类型转换 1.Number():函数把对象的值转换为数字,如果对象的值无法转换为数字,那么 Number() 函数返回 NaN. var a = 'true';console.log(typeof ...

  6. (基础)JavaScript类型转换(强制类型转换+隐式类型转换)

    JavaScript  中有五种基本数据类型(其中包括 String.Number.Boolean.Function.Symbol).三种对象类型(其中包括 Object.Date.Array)和两种 ...

  7. oracle c op,ORACLE中内部函数SYS_OP_C2C和隐式类型转换

    什么是SYS_OP_C2C呢?官方的介绍如下: SYS_OP_C2C is an internal function which does an implicit conversion of varc ...

  8. JavaScript类型转换之显式类型转换

    JavaScript中显式类型转换有六类,分别是Number(mix).parseInt(string).parseFloat(string).String(mix).toString().Boole ...

  9. JS的类型转换,强制转换和隐式转换

    JS的类型转换 1.强制转换 通过String(),Number(),Boolean()函数强制转换 var str=123;var str1='123';console.log(typeof str ...

最新文章

  1. 远观近看阿里云ET平台 如何开启AI落地新风潮
  2. 如何快速生成不同系列的Apriltag码?
  3. 影响SDN和NFV部署速度的两个因素
  4. python画一片树叶_python画一片绿叶给你
  5. SpringMVC简介-SpringMVC概述
  6. ThinkPHP 5.0.x、5.1.x、5.2.x 全版本远程命令执行漏洞
  7. SpringBoot启动错误 If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
  8. Python中将字典保存为文件并读取
  9. Html时间自定义控件
  10. java读取文件的万能解决方案
  11. 购物直播APP系统+短视频系统开发方案
  12. php爬虫模拟登陆爬取数据全过程
  13. 如何解决网页无法复制文字问题
  14. java抽象类和普通类_抽象类和普通类的区别是什么?java类和抽象类的区别
  15. 云计算具有哪些特点,主要分为哪几大类型?
  16. SpringBoot:Whitelabel Error Page 404
  17. VMWare网络模式(Centos7)
  18. MYSQL及MSSQL安全设置
  19. 博学谷java百度网盘_博学谷javaee就业班2020百度云
  20. AD18 导出装配图的一种方法

热门文章

  1. Android 实现朋友圈有图片和视频(转)
  2. .word 汇编指令
  3. 安装科里奥利质量流量计有哪些要求
  4. 记一次qnap系统迁移,从机械硬盘到固态硬盘
  5. 提权学习:第三方软件提权(PcAnywhere 提权)5631
  6. 卷积神经网络CNN里经典网络模型之 AlexNet全网最详解(理论篇)
  7. kali解压deb_kali安装IDA Pro
  8. JavaScript对象详解,js对象属性的添加
  9. jxr怎么变成jpg_“为什么我的阿萨姆奶茶还没有变成美少女?”
  10. flowable自定义扩展属性