javascript数据类型
Undefined、Null、Number、String、Boolean、Symbol、Object、 Function(object)等
-
JavaScript 中有以下几种数据类型:
基本数据类型
- Number(ES5): typeof()返回"number"。用于任何类型的数字:整数或者浮点数。
- String(ES5): typeof()返回"string"。用于字符串。一个字符串可以包含一个或多个字符,所以没有单独的单字符类型。
- Boolean(ES5): typeof()返回"boolean"。用于 true 和 false。
- Null(ES5): typeof()返回"object"。用于未知的值 —— 只有一个 null 值的独立类型。
- Undefined(ES5): typeof()返回"undefined"。用于未定义的值 —— 只有一个 undefined 值的独立类型。
- Symbol(ES6): typeof()返回"symbol"。用于唯一的标识符。
引用数据类型
- Object(ES5): typeof()返回"object"。用于更复杂的数据结构。
- *Function(ES5): typeof()返回"function",属于object。
-
基本数据类型和引用数据类型访问
- 基本类型值:存在栈中,按值访问,操作的是他们实际保存的值;
- 引用类型值:栈中保存地址,堆中保存值,按引用访问,当查询时,我们需要先从栈中读取内存地址,然后再顺藤摸瓜地找到保存在堆内存中的值;
-
基本数据类型和引用数据类型复制
- 基本类型变量的传递(复制):(
互不干涉
)
从一个变量向一个变量复制时,会在栈中创建一个新值,然后把值复制到为新变量分配的位置上,改变源数据不会影响到新的变量; - 引用类型变量的传递(浅复制):(
铁锁连横
)
复制的是存储在栈中的指针,将指针复制到栈中未新变量分配的空间中,而这个指针副本和原指针执行存储在堆中的同一个对象,复制操作结束后,两个变量实际上将引用同一个对象;因此改变其中的一个,将影响另一个;
- 基本类型变量的传递(复制):(
-
typeof 运算符可以查看变量的类型:
- 两种形式:typeof x 或者 typeof(x)。
- 返回的类型的字符串,比如 "string"。
- null 返回 "object" —— 这是语言中的一个错误,实际上它并不是一个对象
- Symbol 返回"function"
- 一般object建议用instanceof来判断类型
typeof用于判断基本类型,instanceof 用于判断对象类型。
-
类型转换
-
转换为 number 类型
值 转换 undefined
NaN null 0 true 和 false 1 and 0 string 字符串开始和末尾的空白会被移除,剩下的如果是空字符串,结果为 0,否则 —— 从字符串中读出数字。错误返回 NaN。 - 使用Number()显示转换
let str = '123'; alert(str); // string let num = Number(str); alert(typeof num); // number
- 使用算术操作符
+
let str = '123'; alert(str); // string let num = +str; alert(typeof num); // number alert(str + 4); // '1234',字符串拼接
- 使用算术操作符
/
alert('6'/'3'); // 2
- 使用位运算符
~~
alert(typeof ~~'123'); // number
- 使用Number()显示转换
-
转换为 string 类型
- 显示转换:
String()
- 隐式转化:
'hello' + 123
- 显示转换:
-
转换为 boolean 类型
- 假值,比如 0、空的字符串、null、undefined 和 NaN 变成 false。
- 其他值变成 true。'0',[],' '(空格,属于非空的字符串)----true
- 操作符:
Boolean()
- 操作符:
!!
-
-
实例:
"" + 1 + 0; // "10"
"" - 1 + 0; // -1
true + false; // 1
6 / "3"; // 2
"2" * "3"; // 6
4 + 5 + "px"; // "45px"
"$" + 4 + 5; // "$45"
"4" - 2; // 2
"4px" - 2; // NaN
7 / 0; // Infinity
" -9\n" + 5;
" -9\n" - 5; // " -9
5"
"-4\t"+6; // "4 6"
null + 1; // 0
undefined + 1; // NaN
!![]; // true
!!''; // false
!!' '; // true
网友评论