数据类型

  • 基本数据类型
  • 引用数据类型
  • 检测数据类型的几种方法
  • 数据的转换
  • 转换成数值类型
  • 隐式转换
  • 转换成字符串类型的数据
  • 转换成布尔值


基本数据类型

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