代码模式
js 数据类型
-
js 有多少种数据类型? 内存分配机制 拷贝式,引用式
-
高手讲8种
-
高高手会讲7种
-
简单数据类型
- Numeric(Number+bigint),string,boolean,null,undefined,symbol 依据内存的分配机制 栈内存,复杂数据类型的栈内存是指向堆内存的地址
- 简单数据类型拷贝,复杂是引用
-
复杂数据类型 object
-
null? null 表示一个空值或不存在的对象,是一个可以赋给变量的特殊值。 没有? 显示回收内存
-
undefined 未定义(类型)
-
symbol唯一值
- 以函数的形式创建,简单值
- 打个标签
- 哪怕标签一样,值绝对不一样
-
bighint 大整数
-
-
简单数据类型 primitive 一眼就能看出其值
函数、数组等有很多特征无法表达
对象
-
丰富、复杂、笼统
-
函数?函数对象、一等对象? 可执行对象
-
函数有属性和方法
-
函数可以作为形参传递
-
数组 可以迭代的对象
-
ECMAScript 是js的标准
-
区分这么多种的对象?
-
得到变量的确切类型 typeof 除了null之外的primitive类型都可以得到正确结果 null 是object 当初设计的bug 前三位 类型的值 null object 000 "123" 123
JavaScript 数据类型概述 JavaScript 有多种数据类型,根据不同的分类标准,可以有不同的划分方式。以下是对 JavaScript 数据类型的详细解释:
- 基本数据类型(Primitive Types) 基本数据类型是不可再分的最小数据单元,它们直接存储在栈内存中。
Number:表示整数和浮点数。 BigInt:表示任意精度的整数。 String:表示文本字符串。 Boolean:表示真(true)或假(false)。 Null:表示空值或不存在的对象。 Undefined:表示未定义的值。 Symbol:表示唯一的标识符,通常用于对象属性的键。 2. 复杂数据类型(Complex Types) 复杂数据类型是引用类型,它们存储在堆内存中,栈内存中存储的是指向堆内存的引用。
Object:表示一个集合,可以包含多个键值对。 Array:表示一个有序的列表,可以包含多种数据类型的元素。 Function:表示可执行的代码块,可以作为值传递。 Date:表示日期和时间。 RegExp:表示正则表达式。 Map:表示键值对的集合,键可以是任何数据类型。 Set:表示唯一的值的集合。 WeakMap:类似于 Map,但键必须是对象,且键是弱引用的。 WeakSet:类似于 Set,但元素必须是对象,且元素是弱引用的。 内存分配机制 栈内存(Stack Memory) 存储基本数据类型。 直接存储值,访问速度快。 栈内存中的数据具有固定的生命周期,通常在函数调用结束后会被自动释放。 堆内存(Heap Memory) 存储复杂数据类型。 存储的是对象的实际数据,栈内存中存储的是指向堆内存的引用。 堆内存中的数据需要手动或自动垃圾回收机制来管理。 拷贝与引用 基本数据类型:按值拷贝。复制的是值本身,两个变量互不影响。 复杂数据类型:按引用拷贝。复制的是引用,两个变量指向同一个对象,修改一个会影响另一个。 特殊值 Null:表示空值或不存在的对象。在内存中表示为一个特殊的指针值。 Undefined:表示未定义的值。通常出现在变量声明但未赋值,或者对象属性不存在时。 Symbol:表示唯一的标识符。即使创建时使用相同的描述,生成的 Symbol 也是不同的。 BigInt:表示任意精度的整数。使用 n 后缀创建,例如 123n。 获取变量的确切类型 typeof 操作符:可以用来获取变量的基本类型,但对于 null 会返回 "object",这是一个历史遗留问题。 Javascript 深色版本 console.log(typeof 123); // "number" console.log(typeof "hello"); // "string" console.log(typeof true); // "boolean" console.log(typeof null); // "object" (bug) console.log(typeof undefined); // "undefined" console.log(typeof Symbol()); // "symbol" console.log(typeof 123n); // "bigint" Object.prototype.toString.call():可以更准确地获取变量的类型,包括 null 和复杂数据类型。 Javascript 深色版本 console.log(Object.prototype.toString.call(123)); // "[object Number]" console.log(Object.prototype.toString.call("hello")); // "[object String]" console.log(Object.prototype.toString.call(true)); // "[object Boolean]" console.log(Object.prototype.toString.call(null)); // "[object Null]" console.log(Object.prototype.toString.call(undefined)); // "[object Undefined]" console.log(Object.prototype.toString.call(Symbol())); // "[object Symbol]" console.log(Object.prototype.toString.call(123n)); // "[object BigInt]" console.log(Object.prototype.toString.call([])); // "[object Array]" console.log(Object.prototype.toString.call({})); // "[object Object]" console.log(Object.prototype.toString.call(function() {})); // "[object Function]" console.log(Object.prototype.toString.call(new Date())); // "[object Date]" console.log(Object.prototype.toString.call(/abc/)); // "[object RegExp]" console.log(Object.prototype.toString.call(new Map())); // "[object Map]" console.log(Object.prototype.toString.call(new Set())); // "[object Set]" console.log(Object.prototype.toString.call(new WeakMap())); // "[object WeakMap]" console.log(Object.prototype.toString.call(new WeakSet())); // "[object WeakSet]" 总结 基本数据类型:Number, BigInt, String, Boolean, Null, Undefined, Symbol。 复杂数据类型:Object, Array, Function, Date, RegExp, Map, Set, WeakMap, WeakSet。 内存分配:基本数据类型存储在栈内存中,复杂数据类型存储在堆内存中。 拷贝机制:基本数据类型按值拷贝,复杂数据类型按引用拷贝。 获取类型:使用 typeof 和 Object.prototype.toString.call()。 希望这些信息能帮助你更好地理解 JavaScript 的数据类型和内存管理机制。
js 数据类型
-
js 有多少种数据类型? 内存分配机制 拷贝式,引用式
-
高手讲8种
-
高高手会讲7种
-
简单数据类型
- Numeric(Number+bigint),string,boolean,null,undefined,symbol 依据内存的分配机制 栈内存,复杂数据类型的栈内存是指向堆内存的地址
- 简单数据类型拷贝,复杂是引用
-
复杂数据类型 object
-
null? null 表示一个空值或不存在的对象,是一个可以赋给变量的特殊值。 没有? 显示回收内存
-
undefined 未定义(类型)
-
symbol唯一值
- 以函数的形式创建,简单值
- 打个标签
- 哪怕标签一样,值绝对不一样
-
bighint 大整数
-
-
简单数据类型 primitive 一眼就能看出其值
函数、数组等有很多特征无法表达
对象
-
丰富、复杂、笼统
-
函数?函数对象、一等对象? 可执行对象
-
函数有属性和方法
-
函数可以作为形参传递
-
数组 可以迭代的对象
-
ECMAScript 是js的标准
-
区分这么多种的对象?
-
得到变量的确切类型 typeof 除了null之外的primitive类型都可以得到正确结果 null 是object 当初设计的bug 前三位 类型的值 null object 000 "123" 123 基于以上笔记帮我生成一篇3000字的具有标题的文章
JavaScript 数据类型详解 引言 JavaScript 是一种广泛使用的编程语言,尤其在前端开发中占据着重要地位。理解 JavaScript 的数据类型及其内存分配机制对于编写高效、可靠的代码至关重要。本文将详细介绍 JavaScript 的数据类型,包括简单数据类型和复杂数据类型,并探讨它们的内存分配机制和拷贝方式。
JavaScript 数据类型概览 JavaScript 中的数据类型可以分为两大类:简单数据类型(Primitive Types)和复杂数据类型(Complex Types)。
简单数据类型(Primitive Types) 简单数据类型是不可再分的最小数据单元,它们直接存储在栈内存中。JavaScript 中的简单数据类型包括:
Number:表示整数和浮点数。 BigInt:表示任意精度的整数。 String:表示文本字符串。 Boolean:表示真(true)或假(false)。 Null:表示空值或不存在的对象。 Undefined:表示未定义的值。 Symbol:表示唯一的标识符。 复杂数据类型(Complex Types) 复杂数据类型是引用类型,它们存储在堆内存中,栈内存中存储的是指向堆内存的引用。JavaScript 中的复杂数据类型包括:
Object:表示一个集合,可以包含多个键值对。 Array:表示一个有序的列表,可以包含多种数据类型的元素。 Function:表示可执行的代码块,可以作为值传递。 Date:表示日期和时间。 RegExp:表示正则表达式。 Map:表示键值对的集合,键可以是任何数据类型。 Set:表示唯一的值的集合。 WeakMap:类似于 Map,但键必须是对象,且键是弱引用的。 WeakSet:类似于 Set,但元素必须是对象,且元素是弱引用的。 内存分配机制 栈内存(Stack Memory) 栈内存用于存储简单数据类型。栈内存中的数据具有固定的生命周期,通常在函数调用结束后会被自动释放。栈内存的访问速度非常快,因为它是连续的内存空间。
堆内存(Heap Memory) 堆内存用于存储复杂数据类型。堆内存中的数据需要手动或自动垃圾回收机制来管理。堆内存的访问速度相对较慢,因为它不是连续的内存空间。
拷贝与引用 简单数据类型:按值拷贝。复制的是值本身,两个变量互不影响。 复杂数据类型:按引用拷贝。复制的是引用,两个变量指向同一个对象,修改一个会影响另一个。 简单数据类型详解 Number Number 类型用于表示整数和浮点数。JavaScript 中的所有数字都是双精度浮点数,即使是整数。
Javascript 深色版本 let num1 = 123; let num2 = 123.45; BigInt BigInt 类型用于表示任意精度的整数。使用 n 后缀创建 BigInt。
Javascript 深色版本 let bigInt1 = 1234567890123456789012345678901234567890n; String String 类型用于表示文本字符串。字符串可以使用单引号或双引号表示。
Javascript 深色版本 let str1 = 'Hello'; let str2 = "World"; Boolean Boolean 类型用于表示真(true)或假(false)。
Javascript 深色版本 let bool1 = true; let bool2 = false; Null Null 类型表示空值或不存在的对象。null 是一个可以赋给变量的特殊值。
Javascript 深色版本 let value = null; Undefined Undefined 类型表示未定义的值。通常出现在变量声明但未赋值,或者对象属性不存在时。
Javascript 深色版本 let undeclared; console.log(undeclared); // undefined Symbol Symbol 类型表示唯一的标识符。即使创建时使用相同的描述,生成的 Symbol 也是不同的。
Javascript 深色版本 let sym1 = Symbol('key'); let sym2 = Symbol('key'); console.log(sym1 === sym2); // false 复杂数据类型详解 Object Object 类型表示一个集合,可以包含多个键值对。对象是 JavaScript 中最灵活的数据类型之一。
Javascript 深色版本 let person = { name: 'Alice', age: 30, city: 'New York' }; Array Array 类型表示一个有序的列表,可以包含多种数据类型的元素。数组是对象的一种特殊形式。
Javascript 深色版本 let arr = [1, 'two', true]; Function Function 类型表示可执行的代码块,可以作为值传递。函数是 JavaScript 中的一等公民,可以作为参数传递,也可以作为返回值。
Javascript
深色版本
function greet(name) {
return Hello, ${name}!
;
}
let sayHello = greet; console.log(sayHello('Alice')); // Hello, Alice! Date Date 类型表示日期和时间。
Javascript 深色版本 let now = new Date(); console.log(now); // 当前日期和时间 RegExp RegExp 类型表示正则表达式,用于匹配字符串中的模式。
Javascript 深色版本 let pattern = /abc/; console.log(pattern.test('abc')); // true Map Map 类型表示键值对的集合,键可以是任何数据类型。
Javascript 深色版本 let map = new Map(); map.set('name', 'Alice'); map.set(1, 'One'); console.log(map.get('name')); // Alice Set Set 类型表示唯一的值的集合。
Javascript 深色版本 let set = new Set(); set.add(1); set.add(2); set.add(1); // 重复值会被忽略 console.log(set.size); // 2 WeakMap WeakMap 类型类似于 Map,但键必须是对象,且键是弱引用的。弱引用意味着如果键对象没有其他引用,它会被垃圾回收。
Javascript 深色版本 let weakMap = new WeakMap(); let obj = {}; weakMap.set(obj, 'value'); console.log(weakMap.get(obj)); // value WeakSet WeakSet 类型类似于 Set,但元素必须是对象,且元素是弱引用的。弱引用意味着如果对象没有其他引用,它会被垃圾回收。
Javascript 深色版本 let weakSet = new WeakSet(); let obj = {}; weakSet.add(obj); console.log(weakSet.has(obj)); // true 区分数据类型 typeof 操作符 typeof 操作符可以用来获取变量的基本类型,但对于 null 会返回 "object",这是一个历史遗留问题。
Javascript 深色版本 console.log(typeof 123); // "number" console.log(typeof "hello"); // "string" console.log(typeof true); // "boolean" console.log(typeof null); // "object" (bug) console.log(typeof undefined); // "undefined" console.log(typeof Symbol()); // "symbol" console.log(typeof 123n); // "bigint" Object.prototype.toString.call() Object.prototype.toString.call() 可以更准确地获取变量的类型,包括 null 和复杂数据类型。
Javascript 深色版本 console.log(Object.prototype.toString.call(123)); // "[object Number]" console.log(Object.prototype.toString.call("hello")); // "[object String]" console.log(Object.prototype.toString.call(true)); // "[object Boolean]" console.log(Object.prototype.toString.call(null)); // "[object Null]" console.log(Object.prototype.toString.call(undefined)); // "[object Undefined]" console.log(Object.prototype.toString.call(Symbol())); // "[object Symbol]" console.log(Object.prototype.toString.call(123n)); // "[object BigInt]" console.log(Object.prototype.toString.call([])); // "[object Array]" console.log(Object.prototype.toString.call({})); // "[object Object]" console.log(Object.prototype.toString.call(function() {})); // "[object Function]" console.log(Object.prototype.toString.call(new Date())); // "[object Date]" console.log(Object.prototype.toString.call(/abc/)); // "[object RegExp]" console.log(Object.prototype.toString.call(new Map())); // "[object Map]" console.log(Object.prototype.toString.call(new Set())); // "[object Set]" console.log(Object.prototype.toString.call(new WeakMap())); // "[object WeakMap]" console.log(Object.prototype.toString.call(new WeakSet())); // "[object WeakSet]" 总结 JavaScript 的数据类型可以分为简单数据类型和复杂数据类型。简单数据类型直接存储在栈内存中,复杂数据类型存储在堆内存中,栈内存中存储的是指向堆内存的引用。理解这些数据类型及其内存分配机制对于编写高效的 JavaScript 代码至关重要。通过 typeof 和 Object.prototype.toString.call(),我们可以准确地获取变量的类型,从而更好地管理和调试代码。
希望本文能帮助你深入理解 JavaScript 的数据类型及其相关概念,为你的编程之旅提供有力的支持。
代码模式 深度搜索 PPT创作 指令中心
服务生成的所有内容均由人工智能模型生成,其生成内容的准确性和完整性无法保证,不代表我们的态度或观点