Skip to content

数据类型 null,undefined,bool和string

null vs undefined

相同点:

  • 都表示“空”
  • 在转换为 bool 时都表示 false, null == undefined

不同点:

  • Number(null) = 0
  • Number(undefined) = NaN

何时会出现undefined?

  • 变量声明但未赋值
  • 函数参数未传入(也是一种形参声明但未赋值)
  • 访问对象不存在的属性
  • 函数无返回值时,返回值是undefined

bool类型

如果 JavaScript 预期某个位置应该是布尔值,会将该位置上现有的值自动转为布尔值。(比如if判断)

会被转为(认为)false的六个值:

  • undefined
  • null
  • false
  • 0 (这个要小心,经常会因为这个误判)
  • NaN
  • "" (空字符串是false, 但空数组,空对象是true)

string

转义字符 字符串处理涉及常见的转义字符,比如\t,\n,\r,\',\",\\

字符数组 字符串可以被视为一个字符数组,可以根据下标访问字符,也有length属性。
但是,这个字符数组无法根据下标直接改变元素

js
let a = 'hello'
console.log(a[1]) // 'e'
a[1] = 'h'
console.log(a) // 仍然是'hello'

delete a[1]
console.log(a) // 仍然是'hello'

JS中涉及的字符集/字符编码

Unicode 字符集 JavaScript 使用 Unicode 字符集。JavaScript 引擎内部,所有字符都用 Unicode 表示。

Unicode 是一个字符集,支持包括多国字符以及表情符号字符, UTF-8 是 Unicode 的一种编码方式 ,它定义了如何将 Unicode 的字符编号(Code Point)转换为字节序列 ,以便在计算机中存储和传输。

Base64 所谓 Base64 就是一种编码方法,可以将任意值转成 0~9、A~Z、a-z、+和/这64个字符组成的可打印字符。使用它的主要目的,不是为了加密,而是为了不出现特殊字符,简化程序的处理, Base64编码完全是可逆的。

URI编码 也称为百分比编码,是一种将保留字符、不可打印字符或非ASCII字符转换为可以通过互联网传输的格式的方法,当我们的url中带有中文或特殊符号时,就被编码为 %加十六进制数

js
var string = 'Hello World!';
btoa(string) // "SGVsbG8gV29ybGQh"
atob('SGVsbG8gV29ybGQh') // "Hello World!"
js
// 非ASCII字符需要用encodeURIComponent先处理
function b64Encode(str) {
  return btoa(encodeURIComponent(str));
}
function b64Decode(str) {
  return decodeURIComponent(atob(str));
}
b64Encode('你好') // "JUU0JUJEJUEwJUU1JUE1JUJE"
b64Decode('JUU0JUJEJUEwJUU1JUE1JUJE') // "你好"