数据类型
- 基本数据类型
- 引用数据类型
- 检测数据类型的几种方法
- 数据的转换
- 转换成数值类型
- 隐式转换
- 转换成字符串类型的数据
- 转换成布尔值
基本数据类型
js有五种基本数据类型:
- string
- number
- boolean
- null
- undefined
还有一个symbol类型是es6引入的。
引用数据类型
js引用数据类型有:
- Object
- 对象
- 数组
- 方法
- 函数
- 类
检测数据类型的几种方法
- typeof
console.log(typeof []); //object
console.log(typeof {}); //object
console.log(typeof ''); //string
console.log(typeof 123);// Number
console.log(typeof true);//Boolean
console.log(typeof null);// Object
console.log(typeof undefined);// undefined
console.log(typeof fn1); // function
typeof只能用来检测基本的数据类型,如果是引用的类型的数据,就会不准确。数组就会被检测成object。null的类型为object是特殊原因。属于JavaScript特有的。
- instanceof操作符判断复杂数据类型的原型链上是否有右边这个构造函数的prototype属性,也就是对象是否是某个构造函数的实例,最后返回布尔值,对整个原型链上的对象都是有效的,一个实例对象,可能会对多个构造函数都返回true!
console.log('123' instanceof String) // false
console.log([] instanceof Array) //true
console.log({} instanceof Object)// true
console.log(fn1 instanceof Function)// true
这个方法用来检测一个复杂数据类型是否在原型链上。但是对于简单数据类型就会失效。因为所有的复杂数据类型都继承自Object。所以:
console.log('123' instanceof String) // false
console.log([] instanceof Array) //true
console.log({} instanceof Object)// true
console.log(fn1 instanceof Function)// true
- Array.isArray()检测一个数据是否是数组。
console.log(Array.isArray('abc')); // false
console.log(Array.isArray([]));// true
- isNaN()判断一个数据是否是非Number,这个判断标准是以Number()方法为标准的。
console.log(isNaN('123')); // false
console.log(isNaN('123abc')); // true
console.log(isNaN(undefined));// true
console.log(isNaN(true)); // false
console.log(isNaN(null)); // false
- Object.prototype.toString.call()方法,返回数据的类型,什么都能检测。
console.log(Object.prototype.toString.call('abc'));// [object String]
console.log(Object.prototype.toString.call(123));// [object Number]
console.log(Object.prototype.toString.call(fn1));// [object Function]
console.log(Object.prototype.toString.call(null));// [object Null]
console.log(Object.prototype.toString.call(undefined));// [object Undefined]
console.log(Object.prototype.toString.call(false));// [object Boolean]
数据的转换
转换成数值类型
- Number()函数转换
console.log(Number('123')); //123
console.log(Number('123ab'));// NaN
console.log(Number('ab123'));// NaN
console.log(Number('false')); // NaN
console.log(Number(true));// 1
console.log(Number(null));// 0
console.log(Number(undefined)); // NaN
- 使用parserInt()方法转换成整数
console.log(parseInt('123'));// 123
console.log(parseInt('123ab'));// 123
console.log(parseInt('ab123'));// NaN
console.log(parseInt('123.14'));// 123
console.log(parseInt(123.14));// 123
console.log(parseInt(true));// NaN
console.log(parseInt(null));// NaN
console.log(parseInt(undefined));// NaN
- 使用parserFloat()转换成浮点数
console.log(parseFloat('123'));// 123
console.log(parseFloat('123ab'));// 123
console.log(parseFloat('ab123'));// NaN
console.log(parseFloat('123.13'));// 123.13
console.log(parseFloat(123.14));// 123.14
console.log(parseFloat(123));// 123
console.log(parseFloat(true));// NaN
console.log(parseFloat(null));// NaN
console.log(parseFloat(undefined));//NaN
Number与其他两个在对Boolean和null的对待上有所区别,Number可以将这两个转化成对应的数值,而parseInt和parserFloat不能将它们两个转换成数字。而对于包含字母的字符串以数字开头,后两者可以转换成数字。
隐式转换
在对两个数据进行除加法以外的运算时会先将数据隐式转换成数值。
因为加号还有拼接字符串的意思,如果两个数据想要进行+的运算,就必须都先转换成数值。
隐式转换使用的是Number()函数。
console.log('123' - '120');// 3
console.log('123' + '120');// 123120
console.log('123' * '120');// 14760
console.log('123a' * '120');// NaN
在要转换的数据前加+号,+‘10’,自动转换为number类型
+prompt(),prompt()获取用户输入数据,类型为string,通过加号,转变为number类型
算术运算符和比较运算符都会使运算符两边的数据类型得到转换
转换为boolean,任何需要用到条件的地方,都会得到布尔值。if(10){10就认为是true,就会执行对应语句}
条件的整体结果是布尔值,用!转换可以得到布尔值
转换成字符串类型的数据
- String()方法
var obj = {
name: '张浩',
age: 19
}
var arr = [1, 2, 3];
var fn = function () {
console.log('nihao');
}
var temp = Number(obj);
var temp1 = Number(arr);
console.log(temp); //NaN
console.log(temp1); //NaN
console.log(Number(fn)); //NaN
console.log(String(obj)); //[object Object]
console.log(String(arr)); // '1,2,3'
console.log(String(fn)); // function () { console.log('nihao');}
console.log(obj.toString()); //[object Object]
console.log(arr.toString()); // '1,2,3'
console.log(fn.toString()); // function () { console.log('nihao');}
转换成布尔值
console.log(Boolean(1));// true
console.log(Boolean('abc'));// true
console.log(Boolean(''));// false
console.log(Boolean(null));// false
console.log(Boolean(undefined));// false
console.log(Boolean(0));// false
console.log(Boolean(123));// true
console.log(Boolean({}));// true
console.log(Boolean([]));// true
console.log(Boolean(NaN));// false