JS的数据类型

112 阅读6分钟

4、JS的数据类型

JS 中变量可以存储 任意类型的值
JS 中数据类型的分类(基本数据类型)
①.Number 类型
 * 数字类型, 不区分 整数浮点数
 *  100 200 1.1 0 -6 -999都是数字
 ```js
     var a = 100
 ```
②.String 类型
 * 字符串类型:只要是引号包裹的内容,就是字符串类型(引号不区分单双)
 ```js
      var str1 = '你好'
      var str2 = "你好"
      var str3 = 'qwer'
      var str4 = '123' //String 类型
      var str5 = 123   //Number 类型
 ```
③.undefined 类型
 * undefined 类型:他是一个数据,表明未定义
 *            变量只定义,不赋值的时候,默认的值就是undefined 表明未定义
 ```js
     var un = undefined  
     var z 
     console.log(un)//定义一个变量,变量名为un,并给它赋值为undefined
     console.log(z)//定义一个变量,变量名为z,没有赋值操作,所以变量默认的值为undefined
 ```
④.Boolean 类型 (后期更多的 用在判断上)
 * 只有两个值 一个是true 一个是false
 *     * true:代表真,正确的
 *     * false:代表假,错误的
 ```js
     var boo1 = true; //定义一个变量,名为boo1,值为布尔值,true
     var boo3 = false;//定义一个变量,名为boo2,值为布尔值,false
     var boo3 = 'true' //因为true是在引号内的,所以boo3是一个字符串类型的
 ```
⑤.null 类型
 * 代表空
 *   * 本身是一种数据类型,只不过代表的是空(啥也没有)
 *   * nullundefined 不同!!
 *   * 使用场景:在创建对象的时候,如果开始不知道对象内部有什么,可以给一个null
 *               类似于在创建变量的时候,只定义,不赋值默认是一个 undefined
 ```js
     var nu = null; //定义一个变量,名为nu,值为null类型,代表空
     console.log(nu);
 ```
* *延申:一道面试题
JS 中数据类型有哪些?

5、JS 的数据类型检测

通过一个方法检测 数据类型的值是什么
 * 语法:typeof(要检测的数据类型的值)
 * typeof 的问题,不能正确检测出null 这个类型的实际类型,检测nuLl 的时候打印结果为object
 *      null代表的含义是空,也就是空对象,所以 typeof会把他当成一个对象去输出
  var str1 = '100'
  var str2 = 100
  var str3
  var str4 = true
  var str5 = false
  var str6 = null

  console.log(typeof(str1)) //string 类型
  console.log(typeof(str2)) //number 类型
  console.log(typeof(str3)) //undefined 类型
  console.log(typeof(str4)) //boolean 类型
  console.log(typeof(str5)) //boolean 类型
  console.log(typeof(str6)) //object
* 面试题:typeof 能正确检测所有数据类型的值吗?
 * 不能。因为他没有办法准确的检测出null的类型是什么
* JS如何正确检测null的类型呢? 欠着,以后会有专门的方法讲解

6、JS的数据类型转换

(1).转换为数字类型
* ①.number(数据)
 *     可以用于任何数据类型,将其转换为数字类型
 *        + 字符串转数字
 *             如果转换的字符串是纯数字组成的。那么直接转换为数字
 *             如果转换的字符串是空字符串或者空白字符串,那么直接转换为数字0
 *             其他类型的字符串(不是空---空自---纯数字字符串)会转换为NaN
 *                 NAN:表示的是一个number的数字,但是没有办法通过常规的数字表明它,所以只能使用NaN来代替(坏掉的数字)
 ```js
     console.log(typeof(Number('100')),Number('100'));//number 100 会将'100’转换为数字然后打印到控制台
     console.log(typeof(Number('')),Number(''));//number 0
     console.log(typeof(Number(' ')),Number(' '));//number 0
     console.log(typeof(Number('abc')),Number('abc'));//number NAN
 ```
 *        + 布尔值转数字
 *            true转换为1
 *            false转换为0
 ```js
     console.log(typeof(Number(true)),Number(true));//number 1
     console.log(typeof(Number(false)),Number(false));//number 0
 ```
 *        + undefined转数字
 *            会直接转换为NaN
 ```js
     console.log(typeof(Number(undefined)),Number(undefined));//number NAN
 ```
 *        + null转数字
 *            会直接转换为0
 ```js
      console.log(typeof(Number(null)),Number(null)) //number 0
 ```
* ②.parseInt(数据) 转换为整数
 * 会将数据转换为number类型,并且值是整数(直接忽略掉小数点以后的值,并不是四舍五入)
 * 在转换的时候,如果数据是绒数字字符串或者是数字开头的字符串,那么会转换为数字,否则就是转换为NaN
  ```js
      console.log(typeof(parseInt('100')),parseInt('100')) //number 100
      console.log(typeof(parseInt('100.123456789')),parseInt('100.123456789')) //number 100
      console.log(typeof(Number('100.123456789')),Number('100.123456789')) //number 100.123456789
      console.log(typeof(parseInt('abc')),parseInt('abc')) //number NAN
      console.log(typeof(parseInt('100abc')),parseInt('100abc'))//number 100
      console.log(typeof(parseInt('999abc')),parseInt('999abc'))//number 999
      console.log(typeof(parseInt('abc666')),parseInt('abc666'))//number NAN
      console.log(typeof(parseInt('')),parseInt(''))//number NAN
      console.log(typeof(parseInt(' ')),parseInt(' '))//number NaN
      console.log(typeof(parseInt(true)),parseInt(true))//number NAN
      console.log(typeof(parseInt(false)),parseInt(false))//number NaN
      console.log(typeof(parseInt(undefined)),parseInt(undefined))//number NAN
      console.log(typeof(parseInt(null)),parseInt(null))//number NaN
 ```
* ③.parseFloat(数据) 转换为小数
 * 转换结果与parseInt类似,但是在转换小数的时候会保留小数点后的数字
 ```js
     console.log(typeof(parseFloat('100.123456789')),parseFloat('100.123456789'))
     //number 100.123456789
     console.log(typeof(parseFloat('100')),parseFloat('100'))//number 100
     console.log(typeof(parseFloat('100abc')),parseFloat('100abc'))//number 100
     console.log(typeof(parseFloat('999abc')),parseFloat('999abc'))//number 999
     console.log(typeof(parseFloat('abc')),parseFloat('abc'))//number NaN
     console.log(typeof(parseFloat('abc666')),parseFloat('abc666'))//number NaN
     console.log(typeof(parseFloat('')),parseFloat(''))//number NaN
     console.log(typeof(parseFloat(' ')),parseFloat(' '))//number NaN
     console.log(typeof(parseFloat(true)),parseFloat(true))//number NaN
     console.log(typeof(parseFloat(false)),parseFloat(false))//number NaN
     console.log(typeof(parseFloat(undefined)),parseFloat(undefined))//number NaN
     console.log(typeof(parseFloat(null)),parseFloat(null))//number NaN
 ```
* ④.扩展:在实际开发中 我个人常用 数据 - 0 (暂时先不考虑原理)
```js
      console.log(typeof('100'),'100')//string 100
      console.log(typeof('100' - 0),'100' - 0)//number 100
      console.log(typeof('100abc' - 0),'100abc' - 0)//number NaN
      console.log(typeof('abc100' - 0),'abc100' - 0)//number NaN
 ```
(2).转换为字符串类型
转换为字符串类型
 * +. 变量.toString()方法
 *       注意:undefined 类型和 null不能使用toString方法(因为JS没有给我们提供,或者说Js不允许)
 ```js
      var str1 = 100
      console.log(typeof(str1.toString()),str1.toString()) //string 100
      var str2 = true
      console.log(typeof(str2.toString()),str2.toString()) //string true
      var str3 = false
      console.log(typeof(str3.toString()),str3.toString()) //string false
      var str4 = undefined
      console.log(typeof(str4.toString()),str4.toString()) 
      //这里会报错,因为undefined不能使用toString
      var str5 = null
      console.log(typeof(str5.toString()),str5.toString()) 
      //这里会报错,因为null不能使用toString*/
 ```
 * +. String(变量)
 *       什么类型都可以转换为字符串类型的,包括undefinednull类型
 ```js
      var str1 = 100
      console.log(typeof(String(str1)),String(str1))//string 100
      var str2 = true
      console.log(typeof(String(str2)),String(str2))//string true
      var str3 = false
      console.log(typeof(String(str3)),String(str3))//string false
      var str4 = undefined
      console.log(typeof(String(str4)),String(str4))//string undefined
      var str5 = null
      console.log(typeof(String(str5)),String(str5))//string null
 ```
 * +.扩展:开发时常用的一个方法 
 *       变量 + ''       (暂时不考虑原理)
 *     转换结果与string类似,写法上更简单一些,所以推荐使用
 ```js
      var str1 = 100
      console.log(typeof(str1 + ''),str1 + '')//string 100
      var str2 = true
      console.log(typeof(str2 + ''),str2 + '')//string true
      var str3 = false
      console.log(typeof(str3 + ''),str3 + '')//string false
      var str4 = undefined
      console.log(typeof(str4 + ''),str4 + '')//string undefined
      var str5 = null
      console.log(typeof(str5 + ''),str5 + '')//string null
 ```
(3).转换为布尔类型
BooLean(变量)  将其他数据类型,转换为布尔值(也就是转换为 true 或者 false)
①.数字转换布尔值,只有0会转换为false 其他的数字都会转换为true(非0即为真)
```js
    var num1 = 100
    var num2 = 0
    var num3 = -1
    console.log(num1,'---->',Boolean(num1))//100 --->true
    console.log(typeof(Boolean(num1)),Boolean(num1))//BooLean true
    console.log(num2,'---->',Boolean(num2))//0 --->false
    console.log(num3,'---->',Boolean(num3))//-1 --->true
```
②.字符串转换布尔值,只有空字符串会转换为 false其他的字符串都会转换为 true
```js
    var str1 = ''
    var str2 = ' '
    var str3 = 'abc'
    var str4 = '0'
    console.log(str1,'---->',Boolean(str1))//'' --->false
    console.log(str2,'---->',Boolean(str2))//' ' --->true
    console.log(str3,'---->',Boolean(str3))//'abc' --->true
    console.log(str4,'---->',Boolean(str4))//'0' --->true
```
③.undefined 和 null 转换为布尔值的时候就是false(重点,以后会常用!!!)
```js
    var und = undefined
    var nul = null
    console.log(und,'---->',Boolean(und))//und --->false
    console.log(nul,'---->',Boolean(nul))//nul --->false
```