学习一门语言,往往是从它的语法组成单元开始学习,学习js,我们最开始接触到的就是js的几种数据类型。
目前我们开发过程中主要使用的是ES6, 也就是基于ECMAScript2015规范的js,关于js的历史感兴趣的话可以网上搜集相关资料。后续文章中主要以es6为主。

数据类型有哪些?

ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。它是 JavaScript 语言的第七种数据类型,前六种是:undefinednull、布尔值(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()

数值准换

  1. Number()
  2. 用于任何数据类型
  3. blooean => 0 1
  4. 数字 => 直接返回
  5. null => 0
  6. undefined => NaN
  7. 字符串

纯数字字符串=> 数字
空字符串 => 0
非纯数字 => NaN

  1. 对象

    调用对象的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): 方法用于测试一个对象是否存在于另一个对象的原型链上

    1. Baz.prototype.isPrototypeOf(baz)
  • propertyIsEnumerable(propertyName): 检查给定的熟悉能否使用for-in枚举。

  • toLocaleString(): 返回对象的字符串表示,与执行环境地区对应。
  • toString(): 返回对象字符串表示。
  • valueOf(): 返回对象的字符串,数值或者布尔值表示。 通常与toString返回相同

一元操作符 (+ -)
对非数值操作会进行Number()转换

二元 (++ —)

位操作符(暂时不清楚使用场景)

逻辑与 &&

有一个操作数不是布尔值的情况:
主要看第一个操作数是不是真
不是返回第一个
是,返回第二个

with

将代码的作用域设置到一个特定的对象中

  1. with(location) {
  2. let hostname = hostname; //location.hostname
  3. }

大量使用导致性能下降,严格模式下报错。

函数

函数的参数
ECMAscript 中的参数在内部用一个数组表示。函数体内通过arguments访问这个参数数组。
arguments只是一个类数组
函数没有重载,可以通过检测参数数量实现不同功能