JavaScript 数据类型

85 阅读4分钟

值类型(基本类型)

String(字符串)
Number(数字)
Boolean(布尔)
Null(空)
Undefined(未定义)
Symbol(es6新增,代表:独一无二的值)

引用数据类型

Array(数组)
Object(对象)
Function(函数)

备注:声明变量,可使用 new 关键词,来声明其类型

new String();
new Number();
new Boolean();
new Array();
new Object();
new Function();

数据类型判断

1、typeof运算符

typeof 'JavaScript'  // "string"
typeof 123.456  // "number"
typeof NaN  // "number"  不是一个数字
typeof Infinity // "number"  比其他任何数字都大的数字
typeof false  // "boolean"
typeof [1,2,3]  // "object"
typeof {name:'崔',age: 24}  // "object"
typeof new Date()  // "object"  日期数据类型为object
typeof null  // "object" null数据类型是object
typeof function () {}  // "function"
typeof hello // "undefined"  未定义或未赋值的变量数据类型为undefined

备注:返回字符串,

2、constructor

'JavaScript'.constructor  // "function String() { [native code] }"
(3.14).constructor  // "function Number() { [native code] }"
false.constructor  // "function Boolean() { [native code] }"
[1,2,3].constructor  // "function Array() { [native code] }"
{ name: 'cui', age: 24 }.constructor  // "function Object() { [native code] }"
new Date().constructor  // "function Date() { [native code] }"
function () {}.constructor  // "function Function() { [native code] }"

示例:检查值是否为数组 [1,2,3].constructor === Array

数据类型转换

1、转字符串类型

// 1、使用 toString()
var num = 123;
num = num.toString()
// 备注:undefined和null不能转换

// 2、使用 String()
var obj = 123
obj = String(obj)
// 备注:任何数据类型都可以转换

// 3、使用隐式转换 
var num = 123
num = num + ''
// 备注:加法运算符 
//      1、符号任意一边为字符串时,为字符串拼接
//      2、两边都是数字或布尔时,会进行数学运算

2、转数字类型

// 1、使用 Number()
var str = '123';
Number('123') // 123
Number('123abc') // NaN
Number(null)  // 0
Number(undefined) // NaN
// 备注:字符串转数字类型:
//      1、纯数字的字符串,则直接转换为数字
//      2、字符串中有非数字的内容,则转换成 NaN (不是一个数字)
//      布尔转数字类型:
//      1、true 转成 1, false 转成 0


// 2、使用 parseInt() 解析字符串,并返回 整数
paeseInt('10')  // 10
parseInt('120abc')  // 120
// 备注:如果字符串的第一个字符不能被解析则返回 NaN

// 3、使用 parseFloat() 解析字符串,并返回 浮点数
parseFloat('10.1258')
// 备注:遇到 加减运算符(+、-)、数字(0-9)、小数点、科学计数法中的指数(e、E)则会忽略该字符及之后的所有字符
// 备注:如果字符串的第一个字符不能被解析则返回 NaN

3、转布尔类型

// 1、使用 Boolean() 
Boolean('123') // true 字符串 '' 转成 false,其他转成 true (' ' 空格字符串不属于空字符串)
Boolean(123) // true 数字 0 转成 false,其他转成 true
Boolean(null) // false
Boolean(undefined) // false
Boolean({}) // true 对象全部转为 true

// 2、使用 !!  
!!(123) // true
!!'爱上js' // true

// 3、三目运算符
'计划' ? true : false

4、转成json格式

// 1、转成 json 字符串
JSON.stringify(123)
JSON.stringify([1,2,3])

// 2、解析JSON字符串
JSON.parse('[1,2,3]')

数据类型隐式转换

1、 运算符


1、+
调用String(),然后进行字符串拼接
2、自增自减运算符(++、--)
调用 Number(),然后进行数学运算
3、逻辑运算符(与 &&、或 ||、非 !)
调用 Boolean() 方法
4、算数运算符(+、-、*、/、%)
调用 Number() 方法,然后进行数学运算
5、关系运算符(>、<、>=、<=、==、!=、===、!===)
字符串和数字比较,字符串调用 Number() 方法,然后进行数学运算

备注:复杂类型会先转成String,再转成Number运算

2、 相等(==)、全等(===)

1、相等:首先转化类型,然后比对数值
前后为 NaN,则为 false
前后有布尔,则先转化为数字类型
有字符串情况下:
   对方是对象,则对象 toString()
   对方是数字,则 Number() 方法,字符串转数字
   对方是字符串直接比较 unicode编码(charCodeAt())
   其他的直接返回 false
数字和对象,则对象取 valueOf() 进行比较,其他返回 false
nullundefined 不进行类型转换,但他俩相等
双方都是对象,则比较是否指向同一个对象

2、全等:比对类型,比对数值

常见大坑

 [] == 0 //true
 ![] == 0 // true
 [] == ![] // true
 [] == [] // false
 {} == !{} // false
 {} == {} // false

3、isNaN

调用 Number() 方法,然后和 NaN 对比,如果是 NaN,返回 true,否则返回 false

4、判断语句转化为布尔类型值

1if
2do while
3while