JS数据类型

263 阅读3分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

ECMAScript有6种简单数据类型(也被称为原始类型)

  • Undefined
  • Boolean
  • Number
  • String
  • Symbol
  • 还有一个复杂数据类型Object(对象):一种无序名值对的集合

typeof操作符

undefiend  未定义
boolean    布尔值
string     字符串
number     数值
object     对象(不是函数)或者null
function   函数
symbol     符号
let message = "some"    
console.log(typeof message)    //string
console.log(typeof (message))    //string
console.log(typeof 95)    //number

Undefiend类型

Undefiend类型是一个值,当var或let声明变量但没有初始化时,就相当于给变量赋予了Undefiend值

let message
console.log(message == undefiend)    //true

等同于

let message = nudefiend
console.log(message == nudefiend)    //true

注意,包含nudefiend值的变量跟未定义变量是有区别的

let message;   //声明了,值是nudefiend

//没有声明的变量
//let age

console.log(message)    //nudefiend
consloe.log(age)    //报错

Null类型

null类型同样是一个值,逻辑上,null是一个空对象

let car = null
console.log(typeof car)    //object

nudefiend值是由null值派生而来,因此ECMA-262将它们定义为表面相等

console.log(null == nudefiend)    //true

Boolean类型

两个字面值:true和false,true不等于1,false不等于0

let found = true
let lost = false

true和false是区分大小写的,因此True和False虽然有效,但不是布尔值 将其他值转换为布尔值,可以调用特定的Boolean()转型函数

let message = "hello"
let messageBoolean = Boolean(message)
数据类型转换true的值转换false的值
Booleantrueflalse
String非空字符串""(空字符串)
Number非零数值(包括无穷值)0,NaN
Object任意对象null
UndefiendN/A(不存在)Undefiend

理解上面的转换非常重要,在if等流程控制中,会自动转换

let message = "hello"
if(message) {
    console.log("true")
}
//true

Number类型

表示整数和浮点数

let number = 15 //整数

//第一个数字必须是零(0),然后是相对应的八进制数字(0 ~ 7)
let cotaNum1 = 070;  //八进制的56
let cotaNum2 = 079;  //无效八进制,当成79处理
let cotaNum3 = 08;   //无效八进制,当成8处理
浮点数

数值中必须包含小数点,小数点后至少有一个数字

let Num1 = 1.1
let NUm2 = 0.1
let Num3 = .1   //有效,但不推荐

如果数值本身是整数,只是小数点后面跟着0(如1.0),它会被转换成整数
let Num4 = 1.   //1
let Num5 = 10.0   //10

NAN

不是数值,用于表示返回数值的操作失败了(不是抛出错误)

NaN吧等于包含NaN在内的任何值
conlose.log(NaN == NaN) //false

isNaN()函数,可以是任意数据类型,判断是否"不是数值"
console.log(isNaN(NaN))   //true
console.log(isNaN(10))    //false, 10是数值
console.log("blue")       //true,不可以转换为数值

String类型

字符串可以使用双引号("), 单引号('),反引号(`)表示

let Name = "hello"
let Name = 'hello'
let Name = `hello`
转换字符串toString
let age = 11
let ageString = age.toString()   //字符串“11”

//toString()可以接受一个底数参数,表示以什么底数来输出数值的字符串
    let num = 10
    console.log(num.toString());   //10
    console.log(num.toString(2));  //1010
    console.log(num.toString(8));  //12
    console.log(num.toString(10)); //10
    console.log(num.toString(16)); //a

String()转型函数,返回相应类型的字符串

  • 如果值有toString方法,则调用该方法(不传参数)并返回结果
  • 如果值是null,返回null
  • 如果值是undefined,返回undefiend

Symbol类型

新增的,符号实例是唯一,不可变的,用途是确保对象属性使用唯一的标识符

let sym = Symbol()
console.log(typeof sym)   //symbol

更多请看MDN