JavaScript数据类型
基本类型
Number
、String
、Boolean
、Null
、Undefind
、BigInt
、Symbol
引用类型
Object
、Array
、Function
、Date
、RegExp
、Map
、Set
等。
计算机内存可以简单的分为两大部分:栈(Stack)
和堆(Heap)
,
基本类型
:基本类型变量的值存储在栈
中
引用类型
:对于引用类型的变量,其引用类型(引用地址或指针)存储在栈
中,而实际的对象的值存储在堆
中。
判断数据类型方式
- typeof
typeof
是一个JavaScript的操作符,用于确定变量或值的数据类型
1
2
3
4
5
6
7
8
9
typeof 123; // "number"
typeof "hello"; // "string"
typeof true; // "boolean"
typeof undefined; // "undefined"
typeof null; // "object" (注意这是一个历史上的错误,实际上 null 的类型不是 "object")
typeof {}; // "object"
typeof []; // "object"
typeof function(){}; // "function"
- instanceof
instanceof
操作符用于判断一个对象是否是某个构造函数的实例
1
2
3
4
[] instanceof Array; // true
{} instanceof Object; // true
new Date() instanceof Date; // true
instanceof
与typeof
的区别
instanceof
可以准确的判断准确的判断复杂的引用类型,不能正确判断基础数据类型typeof
会返回一个变量的基本类型,instanceof返回的是一个布尔型typeof
也有个弊端,除了基本类型可以准确判断(null 除外,早期就出现的一个bug识别为Object),引用类型数据中除了 function 以外,其他的也无法判断- Object.prototype.toString.call() 使用 Object.prototype.toString.call() 方法是一个更通用和准确的方法,可以用来判断任何值的数据类型。
1
2
3
4
5
6
7
8
9
Object.prototype.toString.call(123); // "[object Number]"
Object.prototype.toString.call("hello"); // "[object String]"
Object.prototype.toString.call(true); // "[object Boolean]"
Object.prototype.toString.call(undefined); // "[object Undefined]"
Object.prototype.toString.call(null); // "[object Null]"
Object.prototype.toString.call({}); // "[object Object]"
Object.prototype.toString.call([]); // "[object Array]"
Object.prototype.toString.call(function(){}); // "[object Function]"
hasOwnProperty
hasOwnProperty()
方法用来判断一个对象思否含有指定的自身属性(不是继承来的),返回一个布尔型值。
1
2
3
4
5
6
7
8
9
10
function Fun() {}
Fun.prototype.address = '北京'
var obj = new Fun()
obj.name = 'John'
obj.age = 20
// var obj = { name: "John", age: 20 };
console.log(obj.hasOwnProperty("name")); // true
console.log(obj.hasOwnProperty("age")); // true
console.log(obj.hasOwnProperty("address")); // false 只判断实例自身的属性,继承来的属性返回 false
数据结构
前端开发中常见的数据结构
栈 Stack
: 栈 Stack 是一种“先进后出”的数据结构。队列队 Queue
: 队列 Queue 是一种“先进先出”的数据结构。链表链 Linked list
: 链表不是连续的数据结构,而是由一系列的节点组成,节点之间通过指针连接。树 Tree
: 树,是一种有序的层级结构。每个节点下面可以有若干个子节点。例如常见的 DOM 树。二叉树 Binary Tree
: 二叉树,首先它是一棵树,其次它的每个节点,最多有两个子节点,分别为 left 和 right