第二节:JavaScript中的数据类型及类型转换

### 一. 数据类型

JavaScript中的值,无论是字面量还是变量,都有明确的类型。

#### 1. 概述

> **1.1 基本类型5种**

> number      数字类型

> string           字符串类型

> boolean        布尔类型,仅有两个值true 和 false,讲if语句时我们细说

> undefined     undefined类型,这中类型值只有一个,就是undefined

> null      null类型,这种类型的值也就只有一个null,之后在说

> **1.2 引用类型**

> 讲到再说

#### 2. 数据类型的检测

使用typeof关键字检查数据类型,通常用来检测变量的类型,因为直接量的类型一眼就看的出来

var a = 123;

console.log(typeof a);       //number

##### 2.1 . number 数字类型

所有的number类型

    //下面定义的变量都是number类型

    var a = 200;      

    var b = -123;

    var c = 123.456;

    var d = .5e4;

    var e = 0xf0;

    var f = 016;

    var g = Infinity;      

    var h = NaN;

    console.log(typeof a);

    console.log(typeof b);

    console.log(typeof c);

    console.log(typeof d);

    console.log(typeof e);      

    console.log(typeof f);

    console.log(typeof g);

    console.log(typeof h);

JS中所有的数字都是number类型的,不在细分为整形int、浮点型float这些乱七八糟的东西。

number类型的东西, 所有的数字(不分正负,整浮,大小,进制,),Infinity, NaN

##### 2.2 . string  字符串类型

var str1 = "您好啊";

var str2 = "250";  

var str3 = "";      //空字符串,也是字符串

console.log(typeof str1);

console.log(typeof str2);

console.log(typeof str3);

##### 2.3 . boolean类型

boolean类型(布尔类型), 布尔类型只有两个值true,false,即真或假

var bool = true;  

console.log(bool );

console.log(typeof bool );      //boolean

注意:此时true,和false没有加引号,所以不是字符串, 同时注意它也是变量,true时一个关键字, 本省就有特殊意义,表示真和假,

##### 2.4 . undefined 类型

前面说过,如果只var了一个变量,没有赋初值,它的默认值是undefined;

这个undefined是自成一家,类型和值都是undefined。这种类型的值页只有一个。

var un;   //我只定义了,没有赋初值,所以就是undefined,类型也是undefined

console.log(un);

console.log(typeof un);      //undefined

#### 3. 变量的类型

变量是什么类型,和赋的值有关系,而和定义的时候是没有关系的。定义的时候,都是用var关键字定义的。

// 动态数据类型

var num = 123;  //number

console.log(typeof num);      

num = "哈哈";  //改为string是合法的

console.log(typeof num);

```

我们说js这个语言叫做动态数据类型,原因就在这里,

就是赋值的时候就决定这个变量的类型了。甚至可以改变这个变量的值,为其他类型的值。变量的类型是自动检测的,就是检查变量存储的值的类型,不是认为定义的。

### 二. 运算符:加号 +

我们先看一个运算符加号,因为它比较特殊

加号两边都是数字的时候,那么就是数学加法;两边只要有一遍是字符串,那么结果就是字符串拼接。

console.log("您" + "好");  //您好

console.log(3 + 2);     //5

console.log(3 + "2");    //32

因为2被引号引起来了,所以就是字符串,所以+就是连字符

> 所以要知道加号结果是什么, 一定要知道加号左右两侧的数据类型,在初期学习中很容易出的问题

实例:

var a = "10";

var b = "2";

console.log(a + b);    //102

var a = 10;

var b = 2;

console.log("a" + b);   //a2

多个加号,运算顺序是从左算到右:

var a = 3;

var b = 2;

var c = 5;

console.log(a+b+'c');

console.log("a" + a + b + "c");  //a32c

var a = 3;

var b = 2;

var c = 5;

console.log(a + b + "c");        //5c

console.log(1 + 2 + "a" + "(3 + 4)");

发现没有,运算从左到有计算,默认是数字加分,但是一旦遇到字符串就变成字符串拼接了

#### 三. 数据类型转换

数据类型转换就是其字面意思, 讲一种数据类型转换为另外一种数据类型

先来理解一下,

 在JS中有一些方法可以将内存中表示其他数据类型转换为对应的数字类型

因此我们要先认识一个语句`prompt()`,这个语句和alert差不多,也是弹窗,弹的是输入框:

prompt("请输入你的电话","138")

这些小功能,就叫做程序给我们提供的`API`,每个`API`都有自己不同的语法。

> prompt(“提示文本”,”默认值”);

> 默认值可以省略。

可以把用户输入的值,存入变量:

var a = prompt("请输入你的电话","138");

alert("哈哈,你输入的电话是" + a);

用prompt接收的任何东西都是字符串,哪怕用户输入了一个数字,也是字符串的数字。

接下来,让我们学习数据类型转换, 首先学习讲其他数据类型转为数字类型

##### 1. 转 number

- **Number方法**

  > 1. string       "12px"  => NaN    “” => 0

  > 2. boolean                true => 1   false => 0

  > 3. null                         null => 0

  > 4. undefined              undefined  =>  NaN

  > 5. {}                             {} => NaN

  > 6. []        [1]=>1,[]=>0,[1,2]=>NaN

  > 7. function      Number(function(){}) => NaN

  例子:

  //计算器

  //第1步让用户先输入第1个数字

  var a = prompt("请输入第1个数字啊");

  //第2步让用户先输入第2个数字

  var b = prompt("请输入第2个数字啊啊");

  //第3步求和

  var sum = Number(a) + Number(b);

  //第4步弹出结果

  alert(sum);

- **parseInt方法**

`parseInt`就是将一个string转为一个整数,不四舍五入,直接截取整数部分。如果这个string有乱七八糟的东西,那么就截取前面数字部分。

所以使用这个方法可能会丢失小数部分

```js

var a = "678";

var b = parseInt(a);    //parseInt就把字符串678转为数字678了

console.log(b);         //678

console.log(typeof b);  //number

下面的实例结果都是250,最后一个是-250:

parseInt("250") //250

parseInt("250.666")  //250

parseInt("250年都会很爱你们")   //250

parseInt("250年零个3月又11天")        //250

parseInt("250px")       //250

parseInt("-250.99999999") //-250

`parseInt()`不仅仅能够转为整数,还可以进行进制的转换,把任何进制的数字,都换为10进制。

进制转换的字符串,用逗号隔开。

下面的运算结果都是15:

parseInt(15,10)

parseInt(17,8)

parseInt(1111,2)

parseInt("0xf",16)

parseInt("f",16)

parseInt(16,9)

parseInt("15e6",10)

parseInt("15*6",10)

```

parseInt如果不能转,那么就返回NaN

1parseInt("Hello", 8);   //NaN

parseInt("五百年");    //NaN

- **parseFloat方法**

`parseFloat`就是将字符串转为浮点数

尽可能的将一个字符串转为浮点数,浮点数之后如果有乱七八糟的内容,直接舍弃。

var a = "123.456.888";

var b = parseFloat(a);

console.log(b);      //123.456

console.log(parseFloat("123.67年"));     //123.67

console.log(parseFloat("哈哈123.67年"));   //NaN

也就是说,数字类型都是number,不分整数和浮点数,但是转换的时候分。

- **isNaN()方法**

作用:判断一个数字是不是NaN

 如果是,则结果是true;如果不是,则结果是false

isNaN()方法的作用是判断数字是不是NaN,那它能判断其他数据类型吗??

> isNaN(true)   ==> false

>  isNaN(’12.5px’)   ==> true

>  isNaN(null)   ==> false

>  isNaN(undefined)  ==> true

结论:

isNaN()这个方法会先把其他类型数据转化成数字类型,之后判断是不是NaN

##### 2. 转 string

将一个数字,与一个空字符串进行连字符运算,那么就是自动转为字符串了。

var a = 123;

var b = a + "";

console.log(b);

console.log(typeof b);

##### 3. 转 boolean

- Boolean() 方法

  > 只有六种情况Boolean(被转换的数据)的结果是false,其余全是true

  > 1. 0                 数字0

  > 2. NaN            数字NaN

  > 3. ""                  空字符串

  > 4. false             布尔值false

  > 5. undefined    undefined类型

  > 6. null                 null类型

  用的不多了解几个,大多用隐式转换,这个后面会将,先了解

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容