JavaScript数据类型

6种简单数据类型
Undefined, Null, Boolean, Number, String, Symbol
1种复杂数据类型
Object(是一种无序名值对的集合)

typeof

  • undefined 表示值未定义
  • boolean 表示值为布尔值
  • string 表示值为字符串
  • number 表示值为数值
  • object 表示为对象(而不是函数)或null
  • function 表示值为函数
  • symbol 表示值为符号

typeof 是一个操作符,不是一个函数

let message
typeof message //undefined

不用括号typeof(message),但这样也不会报错

Undefined

tips:建议在变量声明的时候就初始化,这样子使用typeof时就可以区分是给定的变量未声明

undefined是一个假值

if(!undefined){会执行}
Null
null值表示一个空对象指针
typeof null //object
if(null == undefined)  //true
let message = null
if(message){不会执行}
Boolean

两个值true和false。
区分大小写,因此True和False是有效的标识符,但不是布尔值

数据类型truefalse
String非空字符串”“(空串)
Number非零数值0,NaN
Object任意对象null
UndefinedN/Aundefined
let message="Hello"
if(message){会执行}
Number

存储浮点值使用的内存空间是整数值的两倍
ES总会设法把值转换未整数,如1.0是整数

3.12e2 //312
3e-2  //0.02

值的范围

Number.MIN_VALUE	//5e-324
Number.MAX_VALUE	//1.7976931348623157e+308
isFinite()
Number.NEGATIVE_INFINITY	//-Infinity
Number.POSITIVE_INFINITY	//Infinity

NaN

0/0		//NaN
-0/+0	//NaN
5/0		//Infinity
5/-0	//-Infinity
if(NaN == Nan) //false 不等于包括其自身的任何值
isNaN(NaN)		//true
isNaN("string")		//true
isNaN("10")		//false,可以转换为数值10

数值转换(将非数值转换为数值)

Number()、parseInt()、parseFloat()后两个用于字符串转数值

对于空串”“

Number("")		//0
parseInt("")	//NaN
parseInt("10",8)	//可以指定底数,parseFloat()不可以
String

字符串可以使用双引号”,单引号‘,反单引号`

\n		换行
\t		制表
\b		退格
\r		回车
\f		换页
\\		反斜杠
\'		单引号
\"		双引号
\`		反单引号
\xnn	以16进制的nn表示的字符
\unnnn	以16进制的nnnn表示的Unicode字符(转义序列表示一个字符,属于一个字符)

转换为字符串

age.toString()		//可用于数值、布尔值、对象和字符串值
let num = 10
num.toString(2)		//"1010" 参数为底数

String()函数		//还可用于undefined、null
String(null)		//"null"
11+""				//"11"

模板字面量和字符串插值

let value = 5;
let exponent = 'second'
let interpolatedTemplateLiteral=
`${ value} to the ${exponent} power is ${ value * value}`;
let foo = { toString: ()=>'World'}

任何JavaScript表达式都可以插值,甚至可以插入调用的函数

模板字面量标签函数???p42

原始字符串

console.log(`\u00A9`)
console.log(String.raw`\u00A9`)
console.log(String.raw`first line\nsecond line`)
Symbol

1.符号是原始值,且符号实例实例是唯一、不可变的。符号的用途是确保对象属性使用唯一标识符,不会发生属性冲突的危险。

let fooSymbol = Symbol('foo');
console.log(fooSymbol);		//Symbol(foo)

let myString = new String();
console.log(typeof myString);		//object
//new 与Symbol不可以一起用

2.如果运行时的不同部分需要共享和重用符号实例,那么可以用一个字符串作为键,在全局符号注册表中创建并重用符号。
使用keyFor查询全局注册表

// 创建全局符号
let fooGlobalSmybol = Symbol.for('foo');
if(fooGlobalSmybol === fooSymbol) 	//false
// 只能查询全局符号
console.log(Symbol.keyFor(fooGlobalSmybol))		//foo

3.使用符号作为属性

let s1 = Symbol('foo');
let s2 = Symbol('bar');
let o = {
	[s1]:'foo val',
	[s2]:'bar val',
	baz:'baz val',
	qux:'qux val'
};
//Object.getOwnPropertySymbols()返回对象实例的符号属性数组
console.log(Object.getOwnPropertySymbols(o));
// [Symbol(foo), Symbol(bar)]

//Object.getOwnPropertyNames()返回对象实例的常规数组
console.log(Object.getOwnPropertyNames(o));
//["baz","quz"]

//Object.getOwnPropertyDescriptors()返回同时包含常规和符号属性描述符的对象
console.log(Object.getOwnPropertyDescriptors(o));
//{baz:{baz val},...}

//Reflect.ownKeys()返回两种类型的键
console.log(Reflect.ownKeys(o));
//["baz","qux",Symbol(foo),Symbol(bar)]
// 下面的定义没有显示的定义符号属性,所以需要遍历找到所有符号属性
let o={
	[Symbol('foo')]:'foo val',
	[Symbol('bar')]:'bar val'
};
let barSymbol = Object.getOwnPropertySymbols(o).find((symbol)=>symbol.toString().match(/bar/));
console.log(barSymbol);		//Symbol(bar)

4.常用内置符号
for-of循环会在相关对象上使用Symbol.iterator属性,可以通过在自定义对象上重新定义Symbol.iterator的值,来改变for-of在迭代该对象时的行为。

@@iterator 指的是Symbol.iterator

5.Symbol.asyncIterator
表示实现异步迭代器API的函数
for-await-of循环会使用这个函数执行异步迭代操作

待补充。。。

16.Symbol.unscopables
这个符号作为一个属性表示“一个对象,该对象所有的以及继承的属性,都会从关联对象的with环境绑定中排除”
???不常用

Object

Object对象是一组数据和功能的集合,通过new来创建
是派生其他对象的基类

let o  = new Object();

//每个Object实例都有如下属性和方法
constructor:用于创建当前对象的函数。
hasOwnProoerty(propertyName):用于判断当前对象实例上是否存在给定的属性。o.hasOwnProoerty("name")
isPrototypeOf(object):用于判断当前对象是否为另一个对象的原型
propertyIsEnumerable(propertyName):用于判断给定的属性是否可以使用for-in语句枚举
toLocaleString():返回对象的字符串表示,该字符串反映对象所在的本地化执行环境
toString():返回对象的字符串表示
valueof():返回对象对应的字符串、数值或布尔值表示。//通常与toString()的返回值相同

BOM和DOM对象可能是也可以不是继承Object

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值