因为 JavaScript 是弱类型的语⾔言,所以类型转换发生的⾮非常频繁。类型转换分为两种:隐式转换和强制 转换。
隐式转换即程序⾃自动进行的类型转换;
强制转换即我们手动进行的类型转换。

强制转换
强制转换是需要我们手动的去调⽤一些⽅方法来实现的类型转换。JavaScript 中提供了了下列几种⽅法来实现强制转换:
转换为数值类型: parseInt(string) 、 parseFloat(string) 、 Number(mix)
转换为字符串串类型: toString(radix) 、 String(mix)
转换为布尔类型: Boolean(mix)
Number 的强制转换parseInt(string)
解析一个字符串,并返回一个整数。解析规则:

  1. 忽略略字符串前⾯面的空格,直至找到第一个⾮空字符;
  2. 如果第一个字符是0,则忽略;
  3. 如果第一个字符不是数字或者正负号,返回NaN;
  4. 如果第一个字符是数字,则继续解析直至字符串解析完毕或者遇到一个非数字字符为⽌;
  5. 如果是以 0x 开头,则将其当作十六进制来解析;
parseInt('12345px');
parseInt('hello parseInt');
parseInt('');
parseInt('020');
parseInt('11.22.33');
parseInt(123.3);
// 12345
// NaN
// NaN
// 20
// 11 // 123parseFloat(string)

解析一个字符串,并返回一个浮点数。解析规则与 parseInt 基本相同,但也有点区别:
6. 字符串中的第一个小数点.符号是有效的;
7. 如果字符串包含一个可解析为整数的数,则返回整数值⽽不是浮点数值;

  parseInt('12345px');
parseInt('hello parseInt');
parseInt('');
parseInt('020');
parseInt('11.22.33');
parseInt(123.3);
// 12345
// NaN
// NaN
// 20
// 11.22
// 123.2Number(mix)

解析任意数据类型,并返回一个有效数值。转换规则:
8. 布尔值:true 和 false 分别被转换为 1 和 0; 2. 数值:返回本身;
9. null:返回0;
10. undefined:返回NaN;
11. 字符串:遵循以下规则:
空字符串转换为 0 ; 如果引号内是有效合法数字,则转换为对应的数值; 其他情况转换为 NaN ;
String 的强制转换
mix.toString():解析除了 undefined 和 null 之外的所有类型,并返回对应字符串串。
String(mix):解析任意数据类型,并返回一个字符串串。
Boolean 的强制转换 Boolean(mix)

 Number('12345px');
Number('hello Number');
Number('');
Number('020');
Number('11.22.33');
Number(123.3);
// NaN
// NaN
// 0
// 20
// NaN
// 123.2let str = 123;
console.log( str.toString() );
console.log( String(str) );

解析任意数据类型,并返回⼀一个布尔值。

除了了 false 、 “” 、 0 、 NaN 、 null 、 undefined 这六个转换为 false ,其他任何值都转换为 true 。
隐式转换
隐式转换是程序自动进行的类型转换,各种类型间互相转换都符合下⾯面的规则:
Boolean 的隐式转换
在 JavaScript 中,存在隐式转换为 Boolean 值的情况主要分为两种:
在 if 、 while 等需要条件判断的语句句中; 在 ||、&&、! 逻辑语句句中;
上述两种情况中,当语句只有单个变量量时,都会先将变量量转换为 Boolean 值,然后再进行判断。 转换规则同 Boolean() 方法。

Number 的隐式转换
在 JavaScript 中,存在隐式转换为 Number 值的情况主要分为两种:
在算术运算中;
在比较运算中;
上述两种情况中,当参与运算的值不是 Number 时,都会先转换为 Number 值,然后再做运算(其中 + 有两种情况)。
算术运算例⼦:
分析:
“10” 转换为 10
null 转换为 0 udnefined 转换为 NaN [‘5’] 转换为 5
true 转换为 1
比较运算例⼦:
分析:
true 转换为 1
“0” 转换为 0
“10” 转换为 10
null 转换为 0
![] 先转换为 false,false 再转换为 0,[] 转换为 0
String 的隐式转换
在 JavaScript 中,存在隐式转换为 String 值的情况只有一种:就是与 String 值做 + 字符串串拼接。 任何数据类型在与 String 类型的值做 + 运算时,都会隐式转换为 String 值。

 "10" - 1;
null * 10;
undefined / 2;
['5'] * 2;
true + 1;
// 9
// 0
// NaN
// 10
// 22 == true
0 == "0"
"10" > 5
null < 0
[] == ![]
// false
// true
// true
// false
// true1 + "5";     // "15"
true + "";   // "true"

特殊情况
NaN 做算术运算时,结果都是 NaN ;
NaN 做比较运算时,和任何值都不相等;
undefined == null 的比较结果为 true ,除此之外, undefined 和 null 与其他任何值做 == 时结果都为 fasle ;
今天的分享就到这了了,下次再⻅见!

 NaN == NaN
0 == null
NaN + 10
// false
// false
// NaN

学习更多IT知识请关注公众号“朗沃IT学习”

JavaScript变量与数据类型(三)相关推荐

  1. JavaScript变量和数据类型初学者指南

    Scott Molinari , Vildan Softic和Chris Perry同行评审了< JavaScript变量和数据类型初学者指南>. 感谢所有SitePoint的同行评审人员 ...

  2. JavaScript基础之三JavaScript变量和数据类型

    1. JavaScript变量和数据类型 1.0 js变量和数据类型 在我们平时开发中,使用最多的并不是固定的数据, 而是会变换的数据: 比如购物车商品的数量.价格的计算等等: 比如一首歌曲播放的时间 ...

  3. javascript——变量、数据类型

    文章目录 输入输出语句 变量 概念 变量的使用 案例1 案例2 变量的语法扩展 1.更新变量 2.同时声明多个变量 3.声明变量的特殊情况 变量的命名规范 案例3:交换两个变量的值 数据类型 简介 为 ...

  4. JavaScript变量声明+数据类型+数字格式+操作符+进制

    文章目录 1.那些高大上的概念术语都是指什么 什么是web应用? 什么是前台后台? 怎么做网页界面呢? JavaScript可以应用到什么上面? 2.JavaScript实例: 3.语言基础 变量声明 ...

  5. JavaScript 变量及数据类型

    变量声明 常量 常量是始终不能被改变的数据.比如:数字123可以是常量,字符串"hello"也是一个常量 常量通常用来表示固定不变的量,比如圆周率,万有引力常量 变量 从字面上看, ...

  6. python给js变量赋值_python 之 前端开发( JavaScript变量、数据类型、内置对象、运算符、流程控制、函数)...

    11.4 JavaScript 11.41 变量 1.声明变量的语法 //1. 先声明后定义 var name; //声明变量时无需指定类型,变量name可以接受任意类型 name= "eg ...

  7. python 之 前端开发( JavaScript变量、数据类型、内置对象、运算符、流程控制、函数)...

    11.4 JavaScript 11.41 变量 1.声明变量的语法 // 1. 先声明后定义 var name; // 声明变量时无需指定类型,变量name可以接受任意类型 name= " ...

  8. Javascript数据类型:变量与数据类型 数字型Number 字符串型String 布尔型Boolean Undefined和Null 检测变量typeof 数据类型转换 标识符 关键字 保留字

    数据类型 一.数据类型意义 二.变量与数据类型 三.简单数据类型 1.数字型 Number 2.字符串型 String 3.布尔型 Boolean 4.未定义数据类型 Undefined 5.空值 N ...

  9. Javascript一(变量,数据类型,正则表达式,数据,语句)

    本文章适合具有一定程序编程语言基础的人士阅读,最好学完Java基础再来阅读本文章更容易理解语言初学者会看起来比较费劲,不易理解 一.导入脚本 在html导入Javascript的格式是: <sc ...

最新文章

  1. python注解实现原理_Python3注解+可变参数实现
  2. linux服务器mysql数据库新建数据库并配置数据库用户
  3. 【Android 应用开发】Paint 渲染 之 BitmapShader 位图渲染 ( 渲染流程 | CLAMP 拉伸最后像素 | REPEAT 重复绘制图片 | MIRROR 绘制反向图片 )
  4. 3 tables in management a company
  5. 成员函数指针与高性能的C++委托
  6. excel 区间人数柱状图_Excel中,区间统计的3种技巧都不掌握,那就真的OUt了!
  7. java Future FutureTask 并发操作
  8. 论文阅读02:基于深度学习的图像细粒度分类算法
  9. 红帽高级总监谈 OpenJDK 的未来:Java 的未来从未如此光明
  10. SpringMVC_1
  11. 网吧收银系统在服务器上么,网络“高手”侵入网吧收银系统 已被拘留(图)
  12. Mac中mvn命令安装配置command not found
  13. ggplot2的中文显示
  14. 联想台式计算机 不启动u盘,联想电脑不能u盘启动怎么办
  15. “Deep Freeze冰点还原”解冻操作
  16. java导出word文档(office,wps均可)
  17. Linux上使用腾讯QQ与TIM
  18. 零基础安装tensorflow-cpu/gpu+导入pycharm内核
  19. Android Native Crash崩溃及错误原因分析二-实战解决
  20. codevs1013 求先序排列 string黑科技[三星]

热门文章

  1. 说说im2bw这个函数对uint8和double的反应
  2. matlab 基础函数 floor、conv、histeq、im2bw
  3. Kaldi thchs30手札(六)说话人自适应训练(SAT)、FMLLR以及quick训练(line 87-104)
  4. 利用WSUS部署更新程序
  5. 关于KL散度的一些理解
  6. 基于ssm的论坛系统的设计与实现【附源码】
  7. 【IDEA】代码未提交(commit)拉取(pull) 远程代码导致代码全部丢失的bug
  8. ASP.NET中使用JObject和JArray解析Json数据
  9. parser.feed_提示,使用Universal Feed Parser驯服RSS
  10. Gilde框架的使用(未完待续)和glide-transformations(图形变换)