1.数据类型
js中有六种数据类型,包括五种基本数据类型(Number,String,boolean,null,undefined
),引用数据类型(Object
),ES6中新增Symbol
。注意Symbol
的特性是无需new
关键字
确定一个值是哪种基本类型可以使用typeof
操作符,而确定一个值是何种引用类型可以使用instanceof
操作符
typeof操作符
能够区分以下六种:
undefined
boolean
string
number
object
function
不能区分:null
和object
或array
等都会返回object
判断NaN
的方法:NaN !== NaN
NaN != NaN
(唯一不与自身全等的变量)
instanceof
判断:变量是给定引用类型(根据原型链来识别)
Object:所有引用类型都是Object的实例
Array:数组类型
RegExp:正则表达式
Date
Function
person instanceof Object
colors instanceof Array
pattern instaceof RegExp
isNaN()函数
不能转化为数字的都会返回true
数值转换的三个方法Number()
、parseInt()
和parseFloat()
Number()
可以用于任何数据类型
NaN、undefined、不包含有效数值的字符串➡️NaN
对象➡️调用valueOf()方法,再Number();若转化结果为NaN,先调用toString()方法,再Number()
parseInt()
和parseFloat()
专门用于把字符串转换成数值
parseInt()
找到第一个非空格的字符,若不是数值,返回NaN;否则会解析直到碰到第一个非数字。
toString()和String()方法
String()
1.若值有toString
方法,则调用该方法并返回结果。
2.null
,返回'null'
3.undefined
,返回'undefined'
toString()
1.数值、布尔值、对象、字符串值都有toString
方法,但是undefined
和null
没有
Symbol
Symbol.for()
与Symbol()
这两种写法,都会生成新的 Symbol。它们的区别是,前者会被登记在全局环境中供搜索,后者不会。Symbol.for()
不会每次调用就返回一个新的 Symbol 类型的值,而是会先检查给定的key是否已经存在,如果不存在才会新建一个值。比如,如果你调用Symbol.for("cat")
30 次,每次都会返回同一个 Symbol 值,但是调用Symbol("cat")
30 次,会返回 30 个不同的 Symbol 值。
2.遍历对象的方法
a.for...in
b.for...of
c.Object.keys()
// 返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和使用 for...in
循环遍历该对象时返回的顺序一致
d.Object.getOwnPropertyNames()
// 返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性但不包括Symbol值作为名称的属性)组成的数组
e.Object.getOwnPropertySymbols()
// 返回Symbol类型的属性名组成的数组
f.Reflect.ownKeys()
// 静态方法,返回值等同于Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target))
遍历键值对
Object.entries()
// 返回一个给定对象自身可枚举属性的键值对数组,其排列与使用for...in
循环遍历该对象时返回的顺序一致(区别在于 for-in
循环还会枚举原型链中的属性)
Object.fromEntries()
// 方法把键值对列表转换为一个对象