JavaScript数据类型

起源

JavaScript是Netscape公司的程序员Brendan Eich发明的一门语言。为了给新推出的Navigator浏览器提供交互功能,Netscape雇佣了Brendan来为这个浏览器设计一门脚本语言。Brendan的主要方向是函数式编程,而Netscape的管理层希望这门语言参考Java。因此一门同时具有面向对象编程风格函数式编程风格 的混搭式语言诞生了。

JavaScript基础

数据类型

JavaScript有8种数据类型,分别是:数值number、字符串string、布尔bool、符号symbol、空null、空undefined、对象objectBigInt(2020年新增)。

数值number

JavaScript内部,所有数字都是以64位浮点数形式储存,整数也是如此。数值可以以整数、小数、科学计数法、八进制、十六进制、二进制等形式书写。

以下是一些特殊的数值:

  • +0-0,JavaScript 的64位浮点数之中,有一个二进制位是符号位,因此存在2个0。正0和负0是等价的。

  • NaN,表示不是一个数字(Not-A-Number)。主要出现在将字符串解析成数字出错的场合。NaN通过运算符( ==!==== 、以及 !==)和任何变量比较的结果都是false,包括它自己。要比较的话,需要用 Number.isNaN()isNaN()函数。

    0 / 0的结果是NaN

  • Infinity,表示无穷大,有正负之分。1 / 0的结果是Infinity1 / (-0)的结果是-Infinity

字符串 string

JavaScript每个字符固定占2个字节。

JavaScript提供了与Base64相关的全局方法:

window.btoa // 正常字符串转为Base64编码
window.atob // Base65编码的字符串转换为原来的字符串

这两个方法只适合ASCII码的字符,要将非 ASCII码字符转为 Base64编码,必须中间插入一个转码环节,再使用这两个方法。

布尔值 boolean

JavaScript有5个falsy值(相当于false但是又不是false的值,通常在if判断时使用):

undefined
null
0
NaN
''

空undefined 和null

undefinednull都可以表示“没有”。区别是undefined侧重于表示“没有定义”,而null侧重于表示“空”。null转为数值时为0,undefined转为数值时为NaN

undefined一些典型应用场景:

  • 如果一个变量声明了,但是没有赋值,默认是undefined

  • 如果一个函数,没有写return语句,那么默认return undefined

对象 object

JavaScript中的对象是花括号包裹的键值对,如:

let obj = {
name: 'John',
age: 18,
x: function() { },
y: {}
}

JavaScript中,函数、数组也是对象

变量声明

JavaScript声明变量有以下方式:

使用var关键字

var关键字已经不推荐使用。var的特点是:

  • 没有块级作用域:用 var 声明的变量,不是函数作用域就是全局作用域。代码块对它无效。
  • 允许重新声明:用var声明一个变量,如果再用var声明,不会报错。用let的话会报错。
  • 存在变量提升:var声明的变量,可以在其声明语句前被使用。

使用let关键字

let a = 1

规则:

  • 遵循块作用域
    使用范围不能超过定义的{}
{
let b = 1;
}
console.log(b) // undefined
  • 不能重复声明
    指同一作用域下不能有两个名字相同的let声明。
let a = 1
let a = 2 // 会报错
{
let a = 3 // 不会报错
}
  • 可以赋值,也可以不赋值

  • 必须先声明再使用

  • 全局声明的let变量,不会变成window的属性

  • 说明:全局声明的var变量会挂到window

使用const关键字

const的规则和let几乎一样。
只有一条不一样:声明时就要赋值,赋值后不能改。请注意,如果const声明的变量是基本类型,那么变量的值不能改;如果声明的变量是对象,那么对象的引用不能改(该变量不能指向另一个对象)。

参考

微信读书 - 《JavaScript忍者秘籍(第二版)》

阮一峰 - Javascript诞生记

Author: kpt

Permalink: http://kpt.ink/2021/08/01/JavaScript-Data-Types/

文章默认使用 CC BY-NC-SA 4.0 协议进行许可,使用时请注意遵守协议。