JS数据类型


基本数据类型:Undefined、Null、Boolean、Number、String、Symbol(ES6新增)
复杂数据类型:Object

Undefined

声明了变量但是没有初始化,默认为undefined,在if语句中默认转化为false。

let a
console.log(a) // undefined
console.log(a == undefined) // true
console.log(typeof a) //undefined
if (a) {
    console.log('执行了1') // 不会执行
}
if (!a) {
    console.log('执行了2') // 会执行
}
类型转换:
Boolean(undefined): false
Number(undefined): NaN
String(undefined): 'undefined'

Null

null表示一个空对象指针,在if语句中默认转化为false。

let a = null
console.log(typeof a) // object
if (a) {
    console.log('执行了1') // 不会执行
}
if (!a) {
    console.log('执行了2') // 会执行
}
类型转换:
Booleam(null): false
Number(num): 0
String(null): 'null'

Boolean

该类型只有两个值:true、false

数据类型转换为true的值转换为false的值
Booleantruefalse
String非空字符串空字符串
Number非零数值0、Nan
Object任意对象null
UndefinedN/Aundefined
转换为`boolean`:    `Boolean()`
Boolean(undefined):false
Boolean(null):false
Boolean(非空对象包括空数组[]和空对象{}):true
Boolean(0): true || Boolean(0NaN):false
Boolean(非空包括空格字符串):true || Boolean(''):false

Number

Number类型包含整数和浮点数(浮点数数值必须包含一个小数点,且小数点后面至少有一个数字)两种值。

浮点值
数值中必须包含小数点,而且小数点后面必修至少有个一数字。

let num1 = 1.1
let num2 = 0.1
let num2 = .1 // 不推荐

浮点值精度最高可达17位小数,但在算术计算中远不如整数精确

let num1 = 0.1
let num2 = 0.2
console.log(num1 + num2) // 0.30000000000000004

NaN
意思是“不是数值”,非数字类型,属于数值型基本数据类型

console.log(0/0) // NaN
console.log(-0/+0) // NaN
console.log(NaN == NaN) // false NaN不等于包括NaN在内的任何值
console.log(isNaN(NaN)) // true

console.log(isNaN(10)) // false,10可以是数值
console.log(isNaN("10")) // false,可以转换为数值10
console.log(isNaN("blue")) // true,不可以转换为数值
console.log(isNaN(true)) // false,可以转换为数值1

数值类型的转换:
Number():可以用于任何的数据类型

console.log(Number("hello")) // NaN
console.log(Number("")) // 0
console.log(Number("000011")) // 11
console.log(Number(true)) // 1

parseInt():提取 整数数值

console.log(parseInt("1234blue")) // 1234
console.log(parseInt("")) // NaN
console.log(parseInt("0xA")) // 10,解释为十六进制整数
console.log(parseInt(22.5)) // 22
console.log(parseInt("70")) // 70,解释为十进制

//parseInt()也可以接受第二个参数,用于指定底数(进制数)
console.log(parseInt("10",2)) // 2,按二进制
console.log(parseInt("10",8)) // 8,按八进制
console.log(parseInt("10",10)) // 10,按十进制
console.log(parseInt("10",16)) // 16,按十六进制

paseFloat():提取浮点数值

console.log(parseFloat("1234blue")) // 1234,按整数解析
console.log(parseFloat("0xA")) // 0
console.log(parseFloat("22.5")) // 22.5
console.log(parseFloat("22.34.5")) // 22.34
console.log(parseFloat("0908.5")) // 908.5
console.log(parseFloat("3.125e7")) // 31250000

String

字符串的单引号和双引号作用效果一样
字符串有length属性,可以取得字符串的长度
字符串的值是不可变的,所以很多的字符串的api不会改变原字符串值

获取长度

let a = '123456'
console.log(a.length) // 6

字符串转换:
String():适用于任何的数据类型

let a = 11
console.log(String(a)) // 11
let b = true
console.log(String(b)) // true
let c = null
console.log(String(c)) // null
let d
console.log(String(d)) // undefined

toString():null和undefined没有这个功能

let a = 11
console.log(a.toString()) // 11
console.log(a.toString(16)) //b
let b = true
console.log(b.toString()) // true
let c
console.log(c.toString()) // 报错

Symbol

Symbol是ES6新增的一种数据类型。只要你声明了Symbol, 那么就是唯一的了.

let message1 = Symbol('message') // Symbol()中的值是message1的描述
let message2 = Symbol('message')
console.log(message1 == message2) // false
console.log(message1) // Symbol(message)
console.log(message1.description) // message

如果想创建一个可共享的Symbol,要使用Symbol.for()方法。它只接受一个参数,也就是即将创建的Symbol的字符串标识符,这个参数同样也被用作Symbol的描述:

let uid = Symbol.for('uid');
let uid2 = Symbol.for('uid');
let object = {
     [uid] : '12345' 
} ;
console.log(uid === uid2); //true
console.log(object[uid]);  //12345
console.log(object[uid2]);  //12345

Symbol.for()方法首先在全局Symbol注册表中搜索键为‘uid’的Symbol是否存在,如果存在,直接返回已有的Symbol;否则,创建一个新的Symbol,并使用这个键在Symbol全局注册表中注册,随机返回新创建的Symbol。

由于其他类型没有与Symbol逻辑等价的值,所以不能将Symbol强制转换为字符串或是数字类型。

Symbol不是直接存储数据的, 而是, 作为一个独一无二的key, 放置数据的, 防止数据因为重复, 无法存进数据对象中,例如: obj中,存入key为1和‘1’的值, 后面的会把前面的覆盖掉。

class Cache{
    static data = {}
    static set(name, value) {
        this.data[name] = value
    }
    static get(name){
        console.log(this.data[name])
        return this.data[name]
    }
}

let user = {
    name:'用户信息',
    key:Symbol('用户信息')
}

let cart = {
    name: '购物车信息',
    key: Symbol('购物车信息')
}

Cache.set(cart.key, '这是购物车存储的信息')
Cache.set(user.key, '这是用户存储的信息')
Cache.get(user.key) // 这是用户存储的信息
Cache.get(cart.key) // 这里购物车存储的信息
console.log(Cache.data) // { [Symbol(购物车信息)]: '这是购物车存储的信息', [Symbol(用户信息)]: '这是用户存储的信息' }

Object

ECMAScript中的对象其实就是一组数据和功能的集合。通过new操作符后跟要创建的对象类型的名称来创建。

var  o = new Object(); //创建一个Object对象

每个Object类型的实例共有的属性和方法:
constructor: 保存着用于创建当前对象的函数。
hasOwnProperty:用于检测给定的属性在当前对象的实例中是否存在。
isPrototypeOf : 用于检查传入的对象是否是当前对象的原型
propertyIsEnumerble : 用于检查给定属性能否使用for-in来枚举
toLocaleString() : 返回对象的字符串表示。
toString() : 返回对象的字符串表示。
valueOf() : 返回对象的字符串,数值,或布尔表示。通常和toString() 返回的值相同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值