javascript数据类型:

使用typeof可以返回的数据类型有六种

"number" , "string" ,  "boolean" , "object" , "function", "symbol" 和 "undefined"

注:typeof在检测let定义的变量时如果当前状态还未定义变量会报错,不再可靠

number常见的类型包括:

  Infinity 表示无穷大特殊值
  NaN            特殊的非数字值
  Number.MAX_VALUE     可表示的最大数字
  Number.MIN_VALUE     可表示的最小数字(与零最接近)
  Number.NaN         特殊的非数字值
  Number.POSITIVE_INFINITY 表示正无穷大的特殊值
  Number.NEGATIVE_INFINITY  表 示负无穷大的特殊值

object类型会包括对象、数组和Null。

常见的全局对象有:JSON、Error、RegExp、Date、Math、Number、Boolean、String、Array、Function、Object、global(windows)

es6中:Proxy,Promise, ArrayBuffer, DataView, Reflect等等

undefined类型包括未定义的变量和undefined

一、相加符号下的转换

1.与字符串相加

  在字符串与其他类型数据相加时,会产生相应的转换。

  与数字、布尔,调用自身的toString()方法,产生字符串。:

console.log("hello" + 1) // "hello1"

console.log("hello" + true) // "hellotrue"

console.log('hello' + {})// "hello[object Object]"
console.log('hello' + Math)// "hello[object Math]",全局对象中JSON,Math,window,Reflect
console.log('hello' + Number)// "hellofunction Number() { [native code] }",Promise返回的是具体代码 console.log('hello' + null)// "hellonull"
console.log('hello' + undefined)// "helloundefined" console.log('hello'+ NaN)// "helloNaN"
console.log('hello'+ Infinity)// "helloInfinity"

  

字符型:
console.log(1+123)// 124
console.log(1+'123') // "1123"
console.log(1+ null) // 1
console.log(1+ undefined)// NaN
console.log(1+ NaN) // NaN
console.log(1+ Infinity) // Infinity
console.log(NaN + Infinity)// NaN
console.log(NaN + NaN)// NaN
console.log(Infinity + Infinity)// Infinity
console.log(1+ true) // 2
console.log(1+ false) // 1
console.log(1+ function(){}) // "1function (){}"
console.log(1+ []) // "1"
console.log(1+ [1]) // "11"
console.log(1+ {}) // "1[object Object]"
console.log(1+ Math) // 1[object Math] console.log([]+[]) // ""
console.log([]+[1]) // "1"
console.log([]+null) // "null"
console.log([] + undefined) // "undefined"
console.log([] + {})// "[object Object]"
console.log([] + true)// "true" console.log({} + true)// "[object Object]true"
console.log({} + null)// "[object Object]null" console.log(null + null)// 0
console.log(null + undefined)// NaN
console.log(undefined + undefined)// NaN
console.log(Infinity + null)// Infinity
console.log(Infinity + undefined)// NaN
console.log(NaN + undefined)// NaN
console.log(NaN + null)// NaN
Number(null)// 0
Number(undefined)// NaN
Number('')// 0 var a={valueOf: function(){console.log('toValue');return 1}, toString: function(){console.log('toString');return '0'}} console.log(a+1)// toValue 2
console.log(a+'1')// toValue "11"
String(a)// toString "0"
Number(a)// toValue 1
String(null)// "null"
+a// toValue 1 console.log(+{})// NaN
Number({})// NaN console.log(+ new Date())// 1478397365907
Number(new Date())// 1478397717708
console.log(+[])// 0
Number([])// 0
Number([1])// 1
Number([1, 2])// NaN (new Date()).toValue()// Uncaught TypeError: -
console.log([] - [])// 0
console.log('1' - [])// 1
console.log(a-'1')// toValue 0 '' * 1// 0

  

后缀运算符
var a = '22'
a++ // 23
a++ // 24 var a={valueOf: function(){console.log('toValue');return 1}, toString: function(){console.log('toString');return '0'}}
console.log(a++);// toValue 1
console.log(a) // 2
typeof a // "number" 按位非
a = '3';
console.log(~~a)// 3
a={a:1}
console.log(~~a)// 0
~~null// 0
~~undefined// 0
~~NaN // 0 逻辑非
a = {}
console.log(!a)// false var a={valueOf: function(){console.log('toValue');return null}, toString: function(){console.log('toString');return '0'}}
!a // false
~~a// toValue 0 !false // true
!''// true
!null // true
!undefined// true
!0 // true
乘法
var a = '2';
console.log(a*3)// 6 var a={}
console.log(a*3)// NaN
var a= ''
console.log(a*3)// 0 除法 若两个操作数之一为NaN,结果为NaN。
假如两个操作数的正负号相同,结果就是正的,如果不同就是负的。
无穷大被零乘结果是NaN。
无穷大被无穷大除结果是NaN。
无穷大被零除结果是无穷大。符号按照前面说过的规则决定。
无穷大被非零有穷的值除结果是有正负号的无穷大。符号按照前面说过的规则决定。
有穷的非零值被无穷大除结果是零。符号按照前面说过的规则决定。
零被零除结果是NaN;零被其它有穷数除结果是零,符号按照前面说过的规则决定。
有穷的非零值被零除结果是有正负号的无穷大。符号按照前面说过的规则决定。
其它情况下,既没有无穷大也没有NaN参与运算,结果计算出来后会按照IEEE 754 round-to-nearest模式取到最接近的能表示的数。如果值过大不能表示,则结果为相应的正负无穷大。如果值过小不能表示,则结果为相应的正负零。ECMAScript要求支持IEEE 754规定的渐进下溢。
console.log(Infinity * 0)// NaN
console.log(Infinity / Infinity)// NaN
console.log(Infinity / 0)// Infinity
console.log(0 / Infinity)// 0
console.log(Infinity / 11)// Infinity
console.log(77 / Infinity)// 0
console.log(0 / 0)// NaN
console.log(22 / 0)// Infinity
console.log(NaN / Infinity)// NaN
使用 % 运算符
左移<< - >> >>> 比较运算符
'1'<2// true
'2'<1 // false
'22'<100// true
'22' < '100'// false
2<NaN// false
{} < {}// false
{} > {}// false
NaN > 0// false in instanceof? ==
console.log('' ==0)// true
console.log('' == false)// true
console.log(0 == false)// true
console.log(0 == null)// false
console.log(0 == undefined)// false
console.log(null == undefined)// true var a={valueOf: function(){console.log('toValue');return 2}, toString: function(){console.log('toString');return '0'}} a == 2//toValue true
new String("a") == new String("a")为false。
console.log({} == {})// false
console.log(NaN == NaN)// false

  

最新文章

  1. %~dp0是什么意思
  2. STM32——DMA接收和发送的实现
  3. nginx-upload-module模块实现文件断点续传
  4. com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException
  5. Parencodings 分类: POJ 2015-06-28 22:00 7人阅读 评论(0) 收藏
  6. (二)Angularjs - 入门(2)
  7. telnet IP不通/sybase central工具无法连接到数据库
  8. C语言之printf函数
  9. As3.0 类的【枚举】
  10. TCP粘包和拆包问题
  11. oracle帐号scott被锁定如何解锁
  12. python json.dumps 中的ensure_ascii 参数引起的中文编码问题
  13. C++对C语言的变量检测增强
  14. 饿了么测试专场技术沙龙实况回顾&amp;PPT 下载
  15. fcntl F_GETFL
  16. wamp 进入到项目中找不到localhost
  17. Android学习之基础知识十一 —运用手机多媒体
  18. 将一个浮点数转换成人民币读法字符串(java)
  19. js拼接table查询信息部分
  20. php socket 编程(一)

热门文章

  1. redis 简介
  2. kafka java客户端编程
  3. Data Structure 之 算法设计策略
  4. Cable master(二分题 注意精度)
  5. 阮一峰博客里面css3的display:flex的布局
  6. hadoop群集安装中碰到的问题
  7. HTML超出文本显示省略号...[text-overflow]
  8. rfc 标准文档目录
  9. 获取input中的值
  10. JS each 跳出