js基本数据类型和数据转换

236 阅读1分钟

1. 五种字符串基本类型

1.1. 字符串string

字符串,一切以 单引号'' 双引号"" 反引号``包起来的内容,三种引号都可以,建议统一只写一种,反引号可以用来解析变量

作用 : 用于展示文本

     console.log('我是')
     console.log("双引号")
     console.log(`反引号`)
     // 字符串嵌套(可以用转义字符\输出引号)
     console.log("我'喜欢'你")
     console.log('我"喜欢"你')
     // 组合类型
     console.log('教室401');
     // 只写张三不加引号控制台会报错

反引号支持文本内容换行,同时支持写${变量名}读取变量的值

1.2. 数字number

数值,即一切数学中的数字

作用:用于数学计算

    console.log(123)//123
    // 正无穷 首字母要大写 仍然是数字类型
    console.log(Infinity)//Infinity
    // 负数小数都可以
    console.log(-2)//-2

1.3. 布尔型bool/boolean

布尔,只有两个值 : true(真)false(假)

作用 : 用于条件判断:true:条件成立 ,false:条件不成立

     console.log(true)
     console.log(false)

1.4. 未定义undefined

未定义 ,只有一个值 undefined

 console.log(undefined)
  • 只声明变量,不赋值的情况下,变量的默认值为 undefined
  • 三元表达式,判断条件后。代码1或者代码2没有结果时,为undefined

1.5. 空值null

空值 只有一个值 null,null值只有自己手动赋值才会出来,其他未出现的值都是编译器都解析为undefined

 console.log(null)

控制台字符串是黑色,数字是蓝色。布尔型是蓝色,undefined和null是灰色

1.6. undefined与null区别

定义:

  1. undefined : 未定义,本来该有值,但是还没给。 当变量只声明,但是没有赋值。此时默认值是undefined 通俗地讲 : undefined相当于期房。 买了房,但是房子还没建出来。未定义
  2. null : 有定义为空值,可能为空对象。 变量有赋值但是为空。 通俗地讲 : null相当于毛坯房。买了房,但是房子没住人,里面是空的。

相同点:值相等,转布尔类型都是false

         console.log(undefined == null) //true
         console.log(Boolean(undefined)) //false
         console.log(Boolean(null)) //false

不同点:数据类型不同,转number类型值不同

         console.log(undefined === null) //false
         console.log(Number(undefined)) //NaN
         console.log(Number(null)) //0

2. typeof检测数据类型

语法:typeof 数据 或者 typeof (数据)

结果:得到一个字符串来告诉你这个数据是什么类型

    console.log(typeof 123) //number
    console.log(typeof '123') //string
    console.log(typeof true) // boolean
    console.log(typeof undefined) // undefined
/*  object数据类型,可以认为JavaScript中顶级数据类型.在JavaScript绝大多数高级类型对象都是object类型 */
    console.log(typeof null) //object

3. 数据类型转换

数据类型不一致,在进行运算时得不到预期计算结果,需要先进行转换

3.1. 显式转换

显式转换:程序员主动使用语法去转换类型(代码阅读性更高 一看就知道在干什么)

3.1.1. 转number类型

很少使用number转换,常用是前面加一个+号

  1. 字符串类型转number
类型代码备注
转整数parseInt(数据)不是整数只得到整数部分的数字部分(字符串和数字类型都可以)
转小数parseFloat(数据)不是小数只得到小数点前面的整数部分(字符串)

一般在字符串前面加一个+号就会自动转换成number类型 +prompt('请输入年龄')

  1. 非字符串类型转number 错误:console.log(number(true)) 记住首写字母N要大写!
         console.log(Number(true)) // 1
         console.log(Number(false)) // 0
         console.log(Number(undefined)) // NaN
         console.log(Number(null)) // 0

NaN是number类型中一个特殊值,有以下特点

  • NaN表示错误的运算。 产生的原因一般是代码出bug
  • 不能参与任何运算,结果一律是NaN(关系表达式中一律为false)
   console.log('张三' - '李四') // NaN
   console.log(Number('张三')) // NaN
   console.log(NaN + 1) //NaN
   console.log(NaN > 0) //false
   console.log(NaN && 1 > 0) //NaN

3.1.2. 转string类型

很少使用转string类型

  1. String(数据) 首写字母S要大写
         console.log(String(123)) //'123'
         console.log(String(true)) //'true'
         console.log(String(undefined)) //'undefined'
         console.log(String(null)) //'null'
  1. 变量名.toString() 只能转数字和布尔,并且前面只能是变量名

    • 如果是undefined与null,这种方式会报错
    • 这种方式可以支持进制转换。 例如把 十进制转十六进制,仍然是字符串类型
         let num = 10
         // 括号类不加任何内容
         console.log(num.toString()) //'10'
         // 括号类加上进制类型
         console.log(num.toString(16)) //'a'

${num} 在反引号中使用变量名来转换为字符串其实更方便

3.1.3. 转boolean类型(重点)

最重要的一种数据转换,用的最多的

  1. false:有7种数据会得到false (需要记住)

    • '' 空字符串
    • 0 -0 NaN 数字正负0 NaN
    • null undefined 两种数据类型
    • false 本身
  2. true:除false 7种之外的一切数据

3.2. 隐式转换

隐式转换 :当运算符两边的 ‘数据类型不一致’ 的时候,编译器会转成一致后运算

布尔隐式转换是用的最多的

3.2.1. 转换字符串

连接符+ +号两边只要有一边是字符串,此时+就是连接符

 console.log('1' + true) //1true '1'+String(true)

3.2.2. 转换数字算术运算符

算书运算符+ - * / %两边的左右值自动转换成number

         console.log('10' - 1) //9 Number('10')-1
         console.log(1 + true) //2 1+number(true)
         console.log(+'10') //10 数学正号                                                                                                                                                                                                                                                                                                            

3.2.3. 转换布尔

逻辑非 !,if的条件和while的条件都会实现自动转换

	console.log(!1) //false !Boolean(1)
        console.log(!null) //true !Boolean(null)