数据类型(总) - JS

发布时间:2024年01月21日

概览

  • 原始数据类型(值类型、七种):
    • Number, 数字,包括浮点数、在 ±(253-1) 范围内的整数;
    • Bigint, 任意长度的整数;
    • String, 字符串,一个字符串可以包含 0 个或多个字符,没有单字符类型;
    • Booleantruefalse
    • Null ,空值,是一个独立类型,只有一个值;
    • Undefined ,未定义的值,也是一个独立类型,也只有一个值;
    • Symbol ,唯一的标识符。
  • 非原始数据类型(引用型、对象类型):
    • object,用于更复杂的数据结构,包括:
      • Array,数组;
      • Function,函数;
      • Date,日期;
      • 基本 Object 等,这些类型在 typeof 函数验证时,都返回字符串 ‘object’。

声明变量时,可以同时对变量的数据类型进行声明,使用关键字new
typeof null 的结果是 ‘object’,尽管 null 是值类型。

let num = new Number(555);
let s = new String;
s = "hello"
typeof(null)	// 'object'
typeof null		// 'object'

数字类型 - Number

数字的基本表示方法

  1. JS 中的常规数字以 64 位的格式 IEEE-754 存储,也被称为双精度浮点数。这里不包括大数(BigInt等)。
  2. JS 中,除了科学计数法的基本语法外,还有写长数的下划线语法糖,正如下面第四行代码。
let ob = 1000000000	// 10亿
let ob2 = 2e9
let ob3 = 3e-6
let ob4 = 4_000_000_000 // 40亿

特别的数

  1. Infinity-Infinity 是特殊数值,表示正无穷和负无穷(大数字),通过 isFinite(value) 判断;
  2. NaN,即 Not A Number,一般表示错误的计算得到的结果,通过 isNaN(value) 判断。
let inf = -1 / 0	// -Infinity
isFinite(inf)		// true
let n = 'x' / 1		// NaN
isNaN(n)			// true
NaN * 0				// 0
NaN === NaN 		// false

特别的语法1 - 字符串与数字运算?

对于表达式的运算,必须清楚运算法则运算符

  1. 运算遵循基本法则:从左到右、先乘除后加减、先算括号;
  2. + 作为一元运算符时,基本作用:不是数值的操作数 -> 数值,如 +'12' 结果是数值12
  3. + 作为二元运算符时,遇到字符串:字符串拼接,如 '你'+'好' 结果是字符串"你好"

可以看到,+ 是很特别的运算符,且因为优先级的存在,这决定了字符串的运算特性

  • 字符串与数的加法,等于字符串拼接
  • 其他情况,都默认将字符串转换成数(默认字符串前面存在一元运算符+),再进行运算,换句话说,其他算术运算符会将值转换为数字;
  • 注意:如1-0.25+213等是能够正常转换,但是如xhello 等转换成NaN

下面是一些实例与注解:

/* 运算法则	*/
1 + 2 * 3 / (10 - 8)	// 4
/* + 作为一元运算符	*/
+'12'					// 12 - 数值
+'hi'					// NaN - 特别的数
1 + +'12'				// 13 - 数值,第一个加号起加运算的作用
/* + 作为二元运算符	*/
1 + '12'				// '112' - 字符串
'1' + 12				// '112' - 字符串
'1' + '12'				// '112' - 字符串
/* 其他运算符与字符串计算	*/
'12' / 3 				// 4 - 数值
'3' * 2					// 6 - 数值
'3' - 1					// 2 - 数值
'3' - '2'				// 1 - 数值
1 + '12' - 1			// 111 - 数值
'12' - 2 + '2'			// '102' - 字符串
'12' * 'xyz'			// NaN - 特别的数

特别的语法2 - 布尔值与数字运算?

在这一部分中,绝大多数情况下遵循 false->0true->1

1 / false		// infinity 无穷大
1 + true		// 2
false + true	// 1
false + 1 + true // 2

其他进制的数

  • 二进制
  • 八进制
  • 十六进制
let b = 0b101	// 5
let o = 0o17	// 15
let h = 0x11	// 17

字符串类型 - String

三种基本表示:

  1. 单引号;
  2. 双引号,在 JS 中,与单引号等效(没有单个字符的数据类型);
  3. 反引号,是一个扩展表示法,不仅可以换行书写,还可以嵌入变量和表达式。
let s1 = 'Hello';			// 单引号
let s2 = "World";			// 双引号
// 反引号
let phrase = `${s1}:
My name is Li Ming,
1+1=${1+1}!`;

特殊字符

  1. 反斜杠 \ 本身就是一个特殊字符;
  2. 一些特殊字符也需要进行转义来表示。
\n换行
\r在 Windows 文本文件中,两个字符 \r\n 的组合代表一个换行。而在非 Windows 操作系统上,它就是 \n。这是历史原因造成的,大多数的 Windows 软件也理解 \n
\', \"引号
\\反斜线
\t制表符
\b, \f, \v退格,换页,垂直标签 —— 为了兼容性,现在已经不使用了。
\xXX具有给定十六进制 Unicode XX 的 Unicode 字符,例如:'\x7A''z' 相同。
\uXXXX以 UTF-16 编码的十六进制代码 XXXX 的 Unicode 字符,例如 \u00A9 —— 是版权符号 ? 的 Unicode。它必须正好是 4 个十六进制数字。
\u{X…XXXXXX}(1 到 6 个十六进制字符)具有给定 UTF-32 编码的 Unicode 符号。一些罕见的字符用两个 Unicode 符号编码,占用 4 个字节。这样我们就可以插入长代码了。

布尔类型 - Boolean

  1. true,逻辑是;
  2. false,逻辑否。

空值类型 - Null

  1. JS 中的 null 和空指针是不同的概念;
  2. 仅仅是一个代表“无”、“空”或“值未知”的特殊值。
let x = null	// 表示 x 的值是未知的

未定义类型 - Undefined

  1. JS 中的 undefined 表示未被赋值;
  2. 赋值后便不在是。
let x;
console.log(x)	// undefined
x = 10
console.log(x)	// 10

对象类型

一些属性和值一一对应、方法和对应函数体的集合称为对象。

  1. 一个数组实例是一个对象;
  2. 一个函数实例也是一个对象。
// 一个基本对象的定义
let o = { 'age': 18, 
		'name': 'Li Ming', 
		'habit': 'fishing', 
		// 下面是一个方法:打盹时间 = 开工时间 + 2小时
		napTime: function(workBeginTime){ return workBeginTime + 2 } }
// 数组
const arr = [1, 2, 3]
arr				// 在控制台,查看数组的原型对象的属性、方法和相应的值
// 函数
function f(n) { const pi = 3.14; return pi * n; }
f.prototype		// 在控制台,查看函数的原型对象的属性、方法和相应的值
文章来源:https://blog.csdn.net/wander_alice/article/details/135661196
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。