学习一门语言,往往是从它的语法组成单元开始学习,学习js,我们最开始接触到的就是js的几种数据类型。
目前我们开发过程中主要使用的是ES6, 也就是基于ECMAScript2015规范的js,关于js的历史感兴趣的话可以网上搜集相关资料。后续文章中主要以es6为主。
数据类型有哪些?
ES6 引入了一种新的原始数据类型Symbol
,表示独一无二的值。它是 JavaScript 语言的第七种数据类型,前六种是:undefined
、null
、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)。 (引自阮一峰es6)
除了对象之外,其他六种统称为”基本类型”
ECMAScript不支持任何自定义类型的机制,所有的值终将是上述七种数据类型之一。
有的朋友可能会说不是还有Array, Function么,这些都属于Object类型。
typeof
我们常用typeof来检测给定变量的数据类型。
typeof undefined === “undefined” // true
typeof true === “boolean” // true
typeof 1 === “number” //true
typeof “1” === “string” //true
typeof {} === “object” //true
typeof Symbod() ===”symbol” //true
typeof function(){} ===”function” //true
typeof [] ===”object” //true
typeof null === “object” //true
null
从逻辑上说,null值表示一个空对象指针, 这也是typeof操作检测null值时候会返回”object”的原因。
如果定义的变量将来用于保存对象,可以初始化为null.
但是null值typeof的正确返回结果应该是”null” 这算是js由来已久的一个bug。
function
typeof function(){} ===”function” //true
function也是js的一个内置类型。 通过查阅mdn,我们可以知道function是内置对象中的基本对象,实际上是object的一个子类型。 具体来说,函数是一个”可调用对象”。 它有一个内部属性[[Call]], 该属性使其可以被调用。
Function
构造函数 创建一个新的Function对象。 在 JavaScript 中, 每个函数实际上都是一个Function对象。
undefined
已声明,未赋值变量
isNaN
基于对象调用isNaN, 会先调用对象的valueOf()方法 判断返回值能不能转成数字,不能在调用toString()
数值准换
- Number()
- 用于任何数据类型
- blooean => 0 1
- 数字 => 直接返回
- null => 0
- undefined => NaN
- 字符串
纯数字字符串=> 数字
空字符串 => 0
非纯数字 => NaN
对象
调用对象的valueOf()方法, 然后依照前面的规则转换返回的值, 如果转换结果是NaN, 再次调用对象的toString() 再来一次
parseInt()
直到解析到不是数字的哪一位返回前面的数字, 第二个参数表示解析的进制
parseFloat()
同上,没有第二个参数,可以解析浮点数
strIng
字符串长度不可变,要改变某个变量保存的字符串,就得销毁原来的,然后赋值新的
toString()
把一个值转换为字符串
调用数值的toString方法时候可以传递第二个参数,表示转换的进制
null和undefined没有这个方法
在不知道这个变量是不是null或者undefined的情况下,可以使用string(), 可以将任何类型转为字符串
如果变量有toString则调用toString。
null => “null”
undefined => “undefined”
Object
所有它的实例的基础。所具有的的属性有
- contructor: 保存着用于创建当前对象的函数。
- hasOwnProperty(propertyName): 用于检查给定的属性是否存在于当前对象实例中(不包含原型)。 其中,作为参数的属性名propertyName必须是字符串形式。
isPrototypeOf(Object): 方法用于测试一个对象是否存在于另一个对象的原型链上
Baz.prototype.isPrototypeOf(baz)
propertyIsEnumerable(propertyName): 检查给定的熟悉能否使用for-in枚举。
- toLocaleString(): 返回对象的字符串表示,与执行环境地区对应。
- toString(): 返回对象字符串表示。
- valueOf(): 返回对象的字符串,数值或者布尔值表示。 通常与toString返回相同
一元操作符 (+ -)
对非数值操作会进行Number()转换
二元 (++ —)
位操作符(暂时不清楚使用场景)
逻辑与 &&
有一个操作数不是布尔值的情况:
主要看第一个操作数是不是真
不是返回第一个
是,返回第二个
with
将代码的作用域设置到一个特定的对象中
with(location) {
let hostname = hostname; //location.hostname
}
大量使用导致性能下降,严格模式下报错。
函数
函数的参数
ECMAscript 中的参数在内部用一个数组表示。函数体内通过arguments访问这个参数数组。
arguments只是一个类数组
函数没有重载,可以通过检测参数数量实现不同功能