数据类型的转换
【基本数据类型】
数字 number
字符串 string
布尔 boolean
空 null
未定义 undefined
【引用数据类型】
对象 object
普通对象 {}
数组对象 [](Array)
正则对象 (RegExp)
日期对象 (Date)
数学函数 (Math)

函数 function

真实项目中根据需求,我们徐亚进行对数据类型转换(规则和规则之间是相互独立的,千万不要混着记)

把其他数据类型转换为number类型
1.发生的情况
- isNaN检测的时候:当检测的值不是数字类型,浏览器会自己调用Number方法把它先转化为数字,然后再检测是否为非有效数字。

例子1:isNaN('3') =>false
Number('3') ->3
isNaN(3) ->false 是有效数字
例子2:isNaN('3px') =>false
Number('3px') ->NaN
isNaN(3) ->true 非有效数字
1
2
3
4
5
6
基于parseInt/parseFloat/Number 去手动转换为数字类型
数学运算:+ - * / %,但是"+"不仅是数学运算,也可能是字符串拼接
'3'- 1 =>2
Number('3')->3
3-1->2

'3px'- 1 =>NaN

'3px'+ 1 =>'3px1' 字符串拼接

var i='3';
i=i++; => 4 // i++就是单纯的数学运算,不是字符串拼接
i=i+1; => '31'
i+=1; => '31'
1
2
3
4
5
6
7
8
9
10
11
12
在基于"=="比较的时候,有时候也会把其他的值转换为数字类型。
2.转换规律
转换的方法:Number (浏览器自行转换都是基于这个方法完成的)
【把字符串转换为数字】
只有遇到一个非有效数字字符,结果都是NaN
Number(’’) ->0
’ ’ ->0
‘\n’ ->0 // \n为换行符
‘\t’ ->0 // \t为制表符键盘 也就是Tab,一个Tab就是4个空格键盘
【把布尔转换为数字】
true->1
false->0
【把没有转换为数字】
null ->0
undefined ->NaN
【把引用类型转换为数字】
首先先转换为字符串(toString),然后再转换为数字(Number)

把其他的值转化为字符串
1.发生的情况
- 基于alert/confirm/prompt/document.write 等方法输出内容的时候,会把输出的值转化为字符串,然后输出。

alert(1)=>'1'
1
基于’+'进行字符串拼接的时候
把引用值转换为数字的时候,首先为转换为字符串,然后再转换为数字,
对对象设置属性名,如果不是字符串,首先转换为字符串,然后再当做属性存储到对象中(对象的属性只能是数字或者字符串)
手动调用toString/toFixed/Join/String等方法的时候,也是为了转换为字符串
var m = Math.PI //=>获取圆周率
m.toFixed(2) => '3.14'

var ary = [12,34,23];
ary.join('+') = '12+34+23'
1
2
3
4
5
2.转换规律

//=>调用的方法:toString

1 -> '1'
[] -> ''
[12] -> '12'
[12,23] -> '12,23'

(function(){}).toString() =>"function(){}"
new Date().toString() =>"Mon Dec 09 2019 15:13:53 GMT+0800 (中国标准时间)"
...
【对象】
{name:'xxx'} -> '[object Object]'
{} -> '[object Object]'
不管是啥样的普通对象,最后结果都是一样的。
1
2
3
4
5
6
7
8
9
10
11
12
把其他的值转换为布尔类型
1.发生的情况
- 基于!/!!/Boolean等方法转换
- 条件判断中的条件最后都会转换为布尔类型

if(n){
//=>把n的值转换为布尔验证条件真假
}
if('3px'+3){
//=>先计算表达式的结果'3px3',把结果转换为布尔true,条件成立。
} alert(1)=>'1'
1
2
3
4
5
6
2.转换规律
只有"0/NaN/null/undefined/'' "五个值转换为布尔的false,其余为true

特殊情况:数学运算与字符串拼接 “+”
//=>当表达式中出现字符串,就是字符串拼接,否则就是数学运算
1+true => 2 不是字符串当做数学运算,true变成1,所以为2
'1' + true => '1true' 字符串拼接

[12]+10 =>'1210' 虽然现在没看到字符串,但是引用类型转换为数字,首先会转换为字符串,所以会变成了字符串拼接
({})+10 =>"[object Object]10"
[]+10="10"

{}+10 =>10 这个和以上说的没有任何关系,因为不是数学运算,也不是字符串拼接,它是两部分代码
{} 代表一个代码块(块级作用域)
+10 才是我们的操作
严格写法:{}; +10
function fn(); + 10 =>10

1
2
3
4
5
6
7
8
9
10
11
12
13
14
思考题:

12+true+false+null+underfined+[]+'前端'+null+underfined+[]+true =>"NaN前端nullundefinedtrue"
解析:
12+true =>13
13+false =>13
13+null =>13
13+undefined =>NaN
NaN+[] =>'NaN'
'NaN'+'前端' =>'NaN前端'
...
'NaN前端trueundefined'+[] =>'NaN前端trueundefined'
...
=>'NaN前端trueundefined'
1
2
3
4
5
6
7
8
9
10
11
12
特殊情况:"=="在进行比较时候,如果左右两边的数据类型不一样,则先转换为相同的类型,在进行比较
对象==对象:不一定相等,因为对象操作的是引用地址,地址不相同,则不相等

{name:'xxx'} == {name:'xxx'} =>false
[]==[] =>false

var obj1={};
var obj2=obj1;
obj1==obj2 =>true
1
2
3
4
5
6
对象数字:把对象转换为数字
对象布尔:把对象转换为数字,把布尔也转换为数字
对象字符串:把对象转换为数字,把字符串转换为数字
字符串数字:字符串转换为数字
字符串布尔:都转换为数字
布尔数字:布尔转换为数字
=====================>不同情况的比较,都是把其他的值转换为数字,然后再进行比较
nullundefined: true
nulll=undefined:false
null&undefined和其他值都不相等

NaN==NaN:false
NaN和谁都不相等包括自己
=============================>以上都需要特殊记忆

1==true =>true
1==false =>false
2==true =>false 规律不要混淆,这里是把true变为数字1

[]==[] =>false
![]==[] =>true
[]==false => true //转换为数字都为0
[]==true => false //[]转换为数字都为0,true转换为数字都为1

![]==false =>true 先算![],把数组转换为布尔取反=>false =>false==false
![]==true =>false //true为1 ,![]为0
————————————————

JS系列:js数据类型的转换的更多相关文章

  1. js中的数据类型及其转换

    Js中的数据类型 Js中的数据类型一共有六种,即number,string,boolean,underfine,null,object. 一,number Number数据类型指的是数字,可以为整型, ...

  2. JS中的数据类型和转换

    一.JS中的数据类型 js中的数据类型可以分为五种:number .string .boolean. underfine .null. number:数字类型 ,整型浮点型都包括. string:字符 ...

  3. js中的数据类型以及转换

    Js中的数据类型 Js中的数据类型一共有六种,即number,string,boolean,underfine,null,object. 一,number Number数据类型指的是数字,可以为整型, ...

  4. JS中的数据类型及转换

    js的六大类型 js中有六种数据类型,Boolean: 布尔类型 Number:数字(整数int,浮点数float ) String:字符串 Object:对象 (包含Array数组 ) 特殊数据类型 ...

  5. JS系列:数据类型详细讲解

    ctrl+B加粗 ### 数据类型: - 1.number数字类型 NaN:not a number 不是一个数 ,但他是数字类型 isNaN:检测当前值是否不是有效数字,返回true代表不是有效数字 ...

  6. js中关于数据类型的转换

    * 一.转化为数字*/console.log(‘123123’*1.0); /* 二.从一个值中提取另一中类型的值,并完成转化工作 */console.log(parseInt(‘1233zxhag’ ...

  7. js学习笔记1:语法、数据类型与转换、运算符与运算

    注意: 上部代码错误,将停止运行,下部的代码无法显示            typeof 用来定义内容类型,不会输出内容只会输出类型 一.js输出语法         1. 弹窗输出('')内的内容: ...

  8. js中的数据类型隐式转换的三种情况

    js的数据类型隐式转换主要分为三种情况: 1. 转换为boolean类型 2. 转换为number类型 3. 转换为string类型 转换为boolean类型 数据在 逻辑判断 和 逻辑运算 之中会隐 ...

  9. Javascript高级编程学习笔记(3)—— JS中的数据类型(1)

    前一段时间由于事情比较多,所以笔记耽搁了一段时间,从这一篇开始我会尽快写完这个系列. 文章中有什么不足之处,还望各位大佬指出. JS中的数据类型 上一篇中我写了有关JS引入的Script标签相关的东西 ...

随机推荐

  1. thinkphp6.0 开启调试模式以及Driver [Think] not supported

    thinkphp6.0 开启调试模式 首先确认自己是通过 composer 进行的下载,然后修改系统目录下的 .example.env 为 .env 文件 修改 config->app.php ...

  2. nyoj 266-字符串逆序输出 (isdigit(), geline(cin, my_string))

    266-字符串逆序输出 内存限制:64MB 时间限制:3000ms 特判: No 通过数:15 提交数:18 难度:0 题目描述: 给定一行字符,逆序输出此行(空格.数字不输出) 输入描述: 第一行是 ...

  3. 领扣(LeetCode)字母大小写全排列 个人题解

    给定一个字符串S,通过将字符串S中的每个字母转变大小写,我们可以获得一个新的字符串.返回所有可能得到的字符串集合. 示例: 输入: S = "a1b2" 输出: ["a1 ...

  4. ES6 Map 原理

    ES6的Map的键可以是任意的数据结构,并且不重复. 那么map的底层原理是啥呢? Map利用链表,hash的思想来实现. 首先,Map可以实现删除,而且删除的数据可以是中间的值.而链表的优势就是在中 ...

  5. python中的__call__方法

    在Python中,函数其实是一个对象: >>> f = abs >>> f.__name__ 'abs' >>> f(-) 由于 f 可以被调用, ...

  6. KubeCon 2019 北美会议完美落幕 | 云原生生态周报 Vol. 29

    作者 | 陈俊.张晓宇.徐迪 业界要闻 KubeCon 2019 北美会议召开 业界最隆重的盛会 KubeCon+CloudNativeCon 今年在圣地亚哥举办,超过 12000 名参会者以及 10 ...

  7. 【论文阅读】The Contextual Loss for Image Transformationwith Non-Aligned Data(ECCV2018 oral)

    目录: 相关链接 方法亮点 相关工作 方法细节 实验结果 总结与收获 相关链接 论文:https://arxiv.org/abs/1803.02077 代码:https://github.com/ro ...

  8. 2019-9-17:基础学习,windows server 2008 r2,搭建web服务器和FTP服务器

    一.信息服务iis管理器安装 1,点击打开“服务器管理器”-->选择“角色”-->选择“添加角色”,打开“添加角色向导” 2,点击“下一步”-->勾选“web服务器(IIS)”--& ...

  9. 【Luogu P1878】舞蹈课

    Luogu P1878 事实上这道题并不难,但我真没弄懂我手写堆为什么过不了.所以 STL大法好!!! 基本思路 对于每一对相邻异性,将他们的舞蹈技术的差插入一个堆 通过维护这个小根堆,每次就可以取得 ...

  10. exportfs命令、NFS客户端问题、FTP介绍、使用vsftpd搭建ftp

    6月22日任务 14.4 exportfs命令14.5 NFS客户端问题15.1 FTP介绍15.2/15.3 使用vsftpd搭建ftp 14.4 exportfs命令 当我们修改nfs的配置文件e ...