1.js常用的数据类型有哪些,有哪些判断数据类型的方式
JavaScript常用的数据类型包括:
Number、String、Boolean、Null、Undefined、Symbol、BigInt、Object、Array、Function、Map
Number:是一种基本数据类型,用于表示数值。它可以包含整数和浮点数。
1.创建Number:可以使用数字字面量直接创建数字,例如:let num = 10;,也可以使用 Number() 构造函数创建数字,例如:let num = new Number(10);。
2.Number的操作
数字可以进行各种数学运算,如加法、减法、乘法和除法。例如:
3.Number:属性
● Number.MAX_VALUE:表示JavaScript中能表示的最大数值
● Number.MIN_VALUE:表示JavaScript中能表示的最小的正数值
● Number.POSITIVE_INFINITY:表示正无穷大
● Number.NEGATIVE_INFINITY:表示负无穷大
● Number.NaN:表示一个非数字值
4.Number:方法
● Number.toString():将数字转换为字符串
● Number.toFixed():将数字转换为指定小数的字符串
● Number.toPrecision():将数字转换为指定有效位数的字符串
●Number.valueOf():返回数字的原始值
5.Number:特殊值
● Infinity:表示正无穷大。
● -Infinity:表示负无穷大。
● NaN:表示一个非数字值。
JavaScript的数字是不可变的,即数字的值不能被修改。当对数字进行操作时,会创建一个新的数字。
String:字符串,用一对单引号(' ')或双引号(" ")及引号内的字符构成,引号中间的部分可以任意多个,也可以是没有字符的空字符串。字符串中如果字符包含了双引号,则其外部应该由单引号标示,反之相同。
1.使用字符串字面量创建:可以直接将一串字符用单引号或双引号括起来
2.使用String构造函数创建:可以使用String构造函数来创建一个新的String实例
注意:使用String构造函数创建的实例是一个对象,而不是原始的字符串数据类型。
3.String:常用方法
● length:返回字符串的长度
● charAt(index):返回字符串中指定位置的字符
● substring(startIndex, endIndex):返回字符串中指定范围的子字符串
● indexOf(searchValue, startIndex):返回字符串中指定的第一个匹配位置的索引
● concat(str1, str2, ...):将多个字符串连接起来
● toUpperCase():将字符串转换为大写
● toLowerCase():将字符串转换为小写
Boolean:布尔值
**** 1.直接赋值:可以使用true或false直接赋值给一个变量
2.Boolean()构造函数:可以使用Boolean()构造函数来创建Boolean对象
注意:使用Boolean()构造函数创建的是Boolean对象,而不是原始的Boolean数据类型
3.Boolean对象的常用方法
● toString():将Boolean对象转换为字符串
● valueOf():返回Boolean对象的原始值
● toLocaleString():将Boolean对象转换为本地化字符串
注意:原始的Boolean数据类型没有这些方法。如果需要使用这些方法,可以将原始的Boolean数据类型转换为Boolean对象,使用对象方法进行操作
Null:表示一个空值或者表示一个不存在的对象
1.创建null数据类型实例
null数据类型本身没有相关的方法,因为它只表示一个空值。但是,可以使用typeof操作符对null进行类型检查,结果为"Object"。此外,可以使用严格相等操作符(===)将null与其他值进行比较
Undefined:表示一个未定义的值
1.声明一个变量但不为其赋值来创建一个 Undefined 数据类型的实例
2.可以使用一些方法来判断一个值是否是 Undefined
● typeof 操作符:可以使用 typeof 操作符来判断一个值的类型。当值为 Undefined 时,typeof 返回 “undefined”。
● === 操作符:可以使用 === 操作符来判断一个值是否严格等于 Undefined。
● == 操作符:可以使用 == 操作符来判断一个值是否等于 Undefined。然而,使用 == 操作符会进行类型转换,因此不推荐使用。
注意:尽量避免使用 Undefined 数据类型,而应该使用 null 来表示一个空值。因为 Undefined 数据类型的主要作用是表示一个未定义的值,而 null 则表示一个空值。
Symbol:Symbol是ES6新增的一种基本数据类型,用于表示独一无二的值。
- 创建Symbol:可以使用Symbol()函数创建一个Symbol值,每个Symbol值都是独一无二的,即使是创建相同参数的Symbol值也不相等。
2. Symbol作为对象属性名:由于Symbol值是独一无二的,可以作为对象属性名,防止属性名冲突。
3. Symbol常量:可以使用Symbol.for()函数创建一个全局共享的Symbol值,可以用于定义常量。
4. 内置Symbol值:ES6内置了一些Symbol值,用于表示对象的内部方法或属性,例如Symbol.iterator、Symbol.hasInstance等。
BigInt:BigInt 数据类型用于表示任意精度的整数。
1.使用 BigInt() 函数或在整数后面加上 n 后缀来创建一个 BigInt 数据类型的实例。
2.BigInt(value):将给定的值转换为 BigInt 数据类型。
3.BigInt.prototype.toString(radix):将 BigInt 转换为指定进制的字符串。
4.BigInt.prototype.valueOf():将 BigInt 转换为原始的 BigInt 值
注意:BigInt 数据类型只能与 BigInt 数据类型进行运算,不能与 Number 数据类型混合运算。如果需要进行 BigInt 与 Number 之间的运算,需要先将其中一个值转换为相应的类型。
Object:用于存储键值对
1.使用大括号 {} 或者 new Object() 来创建一个 Object 数据类型的实例
2.Object常用方法
● Object.assign(target, source1, source2, ...):用于将一个或多个源对象的属性
● Object.keys():返回一个包含对象所有属性名的数组
● Object.values():返回一个包含对象所有属性值的数组
● Object.entries():返回一个包含对象所有属性名和属性值的二维数组
● Object.hasOwnProperty():判断对象是否包含指定的属性
Array:数组是值的有序集合,数组中的每个值称为一个元素,每个元素在数组中都有一个数字位置,称为索引,索引从 0 开始,依次递增
1.使用数组字面量创建
2.使用Array构造函数创建
Array的常用方法
| 语法 | 参数 | 返回值 |
|---|---|---|
| arr.push(element1, element2, ..., elementN) | element1, element2, ..., elementN:要添加到数组末尾的一个或多个元素 | 返回修改后的数组的新长度 |
| arr.pop() | - | 返回被删除的元素 |
| arr.shift() | - | 返回被删除的元素 |
| arr.unshift(element1, element2, ..., elementN) | element1, element2, ..., elementN:要添加到数组开头的一个或多个元素 | 返回修改后的数组的新长度 |
| array.concat(array1, array2, ..., arrayN) | array1, array2, ..., arrayN:要合并到新数组中的数组或值 | 返回一个新的合并后的数组 |
| arr.join(separator) | separator:可选,指定用作分隔符的字符串。如果省略该参数,则默认使用逗号 "," 作为分隔符 | 返回一个由数组元素连接而成的字符串 |
| array.slice(start, end) | start:可选,表示从哪个索引开始提取元素。如果省略该参数,默认从索引 0 开始; end:可选,表示在哪个索引处结束提取元素(不包括该索引)。如果省略该参数,默认提取到数组的末尾 | 返回一个新的数组,包含提取的元素。如果 start 大于数组的长度,则返回空数组 |
| array.splice(start, deleteCount, item1, item2, ...) | start:必需,指定插入、删除或替换的起始索引位置 ;deleteCount:可选,表示要删除的元素个数。如果为 0,则不删除任何元素; item1, item2, ...:可选,要插入到数组中的新元素 | 返回一个由被删除的元素组成的新数组,如果没有删除任何元素,则返回一个空数组 |
| array.indexOf(searchElement, fromIndex) | searchElement:必需,要查找的元素; fromIndex:可选,开始查找的索引位置。默认为 0,如果为负数,则从末尾倒数 | 如果找到指定元素,则返回它在数组中的索引位置;如果未找到,则返回 -1 |
| array.lastIndexOf(searchElement, fromIndex) | searchElement:必需,要查找的元素 ;fromIndex:可选,开始查找的索引位置。默认为数组的最后一个元素的索引,如果为负数,则从末尾倒数 | 如果找到指定元素,则返回它在数组中的最后一个匹配位置的索引;如果未找到,则返回 -1 |
| array.forEach(callback(currentValue, index, array)) | callback:必需,表示要对数组的每个元素执行的回调函数; currentValue:当前正在处理的元素 ;index:可选,当前元素的索引; array:可选,当前正在操作的数组 | undefined,forEach() 方法不返回一个新的数组,而是对原始数组进行操作 |
| array.map(callback(currentValue, index, array)) | callback:必需,表示要对数组的每个元素执行的回调函数; currentValue:当前正在处理的元素;index:可选,当前元素的索引 ;array:可选,当前正在操作的数组 | 一个新数组,其中包含了原始数组经过回调函数处理后的返回值 |
| array.filter(callback(currentValue, index, array)) | callback:必需,表示要对数组的每个元素执行的回调函数 ;currentValue:当前正在处理的元素 ;index:可选,当前元素的索引; array:可选,当前正在操作的数组 | 一个新数组,其中包含通过测试函数的所有元素 |
| array.reduce(callback(accumulator, currentValue, index, array), initialValue) | callback:必需,表示要对数组的每个元素执行的累加器函数; accumulator:累加器累计的值,也可以被称为累加的结果; currentValue:当前正在处理的元素; index:可选,当前元素的索引; array:可选,当前正在操作的数组; initialValue:可选,作为初始累加器的值。如果未提供初始值,则使用数组中的第一个元素作为初始累加器的值,并从数组的第二个元素开始执行累加器函数 | 累加器的最终结果 |
| array.sort(compareFunction) | compareFunction:可选,表示用于确定元素排序顺序的比较函数 如果省略该参数,则元素将被转换为字符串,并根据其 UTF-16 代码单位值进行排序。 如果使用自定义的比较函数,则需要接受两个参数,并返回一个负值、零或正值,具体取决于它们的相对顺序。 | 排序后的数组(原始数组已经被修改) |
| array.reverse() | - | 反转后的数组(原始数组已经被修改) |
- push():向数组末尾添加一个或多个元素,并返回新的数组长度
- pop():删除数组末尾的元素,并返回删除的元素
- shift():删除数组第一个元素,并返回删除的元素,同时将数组的长度减1
- unshift():向数组开头添加一个或多个元素,并返回新的数组长度
- concat():将两个或多个数组合并成一个新数组
- join():将数组的所有元素连接成一个字符串
- slice():返回一个新的数组,包含原数组中的指定部分
- splice():向/从数组中添加/删除元素
- indexOf():返回某个元素在数组中第一次出现的索引,如果不存在则返回-1
- lastIndexOf():返回某个元素在数组中最后一次出现的索引,如果不存在则返回-1
- forEach():对数组的每个元素执行指定的操作
- map():对数组的每个元素执行指定的操作,并返回一个新的数组
- filter():对数组的每个元素进行过滤操作,并返回一个新的数组,只包含满足指定条件的元素
- reduce():对数组中的所有元素执行指定的操作,并返回一个累积结果
- sort():对数组的元素进行排序
- reverse():反转数组中的元素的顺序
- length:获取或设置数组的长度
Function:
1.使用函数表达式来创建函数类型的实例
2.使用函数声明来创建函数类型的实例
Function常用方法
● call() 方法:调用函数,并传递一个指定的 this 值和单独的参数
● apply() 方法:调用函数,并传递一个指定的 this 值和参数数组
● bind() 方法:创建一个新函数,将原函数绑定到指定的 this 值和参数
● toString() 是 JavaScript 中函数对象的一个方法,它用于将函数转换为字符串表示形式
● arguments 是 JavaScript 中的一个特殊对象,它包含了函数调用时传递的所有参数。它可以在函数内部使用,用于访问和处理函数的参数
Map:Map是ES6新增的一种数据结构,用于存储键值对,其中键和值可以是任意类型的数据。相比于对象,Map具有更好的性能和更多的功能。
- 创建Map:可以使用new关键字创建一个Map对象
也可以使用数组创建一个Map对象,其中数组的每个元素是一个键值对数组。
2. 添加键值对:可以使用set()方法添加一个键值对
3. 获取键值对:可以使用get()方法获取指定键的值
4. 删除键值对:可以使用delete()方法删除指定键的值
5. 遍历Map:可以使用for…of循环遍历Map中的键值对
还可以使用forEach()方法遍历Map中的键值对
判断数据类型的方式有:
- typeof运算符:可以判断基本数据类型(除了null),但对于引用数据类型,只能判断是否为object。
- instanceof运算符:可以判断一个实例是否属于某个类,但无法判断基本数据类型。
- Object.prototype.toString.call()方法:可以判断所有数据类型,包括基本数据类型和引用数据类型。
2.各种类型如何相互转换,这些转换方式有哪些特点,适用于哪些场景,哪些是隐式转换哪些是显示转换
-
字符串转换:
- 隐式转换:当字符串与其他数据类型进行操作时,JavaScript会自动将其他数据类型转换为字符串。
- 显式转换:使用 String() 函数或字符串拼接操作符
+将其他数据类型转换为字符串。
-
数字转换:
- 隐式转换:当数字与字符串进行操作时,JavaScript会自动将字符串转换为数字。
- 显式转换:使用 Number() 函数将其他数据类型转换为数字,或使用 parseInt() 和 parseFloat() 函数将字符串转换为整数或浮点数。
-
布尔值转换:
- 隐式转换:在条件语句中,JavaScript会自动将其他数据类型转换为布尔值。
- 显式转换:使用 Boolean() 函数将其他数据类型转换为布尔值。
-
数组转换:
- 显式转换:使用 Array.from() 或扩展运算符 [...] 将类似数组的对象或可迭代对象转换为数组。
-
对象转换:
- 显式转换:使用 object() 函数将其他数据类型转换为对象。
-
JSON转换:
- 显式转换:使用 JSON.stringify() 将JavaScript对象转换为JSON字符串,使用 JSON.parse() 将JSON字符串转换为JavaScript对象。
这些转换方式有以下特点和适用场景:
- 隐式转换:在某些情况下,JavaScript会自动进行类型转换,如字符串与数字相加时会进行隐式转换成字符串拼接。这种转换通常在简单的运算或条件判断中使用。
- 显式转换:通过调用内置函数或操作符进行显式转换可以更明确地控制类型转换的结果。这种转换通常在需要明确指定数据类型或进行复杂的转换逻辑时使用。