JS 中类型和类型转换
Posted samweb
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS 中类型和类型转换相关的知识,希望对你有一定的参考价值。
类型
首先明确一点,Js中的类型是针对值来说,而不是针对变量,值就是所谓的42, ‘abc‘, false 等能用js 操作的数据。在js 中说某某某是什么数据类型,其实是说的这些值是什么类型。值呢?有7种数据类型: number, string, boolean, null, undefined, object, symbol. 42 就是number 类型了。怎么判断出来的,最简单的办法就是typeof 操作符了,它返回一个字符串来表示类型
console.log(typeof 42); // ‘number‘
这时,你可能想到,不对啊,以前也用typeof 操作过变量啊?也返回类型了啊。
let a = 42 console.log(typeof a); // ‘number‘
其实这里仍然是对值进行的类型判断,因为你不能说变量a就是number 类型,因为 js 是弱类型语言,完全可以把重新赋值为一个变量。
let a = 42 console.log(typeof a); // ‘number‘ a = ‘str‘; console.log(typeof a); // ‘string‘
这时,你就说不出变量a 是什么类型了。在js 中,如果对一个变量进行typeof 操作,一定是对当时变量所指向或所包含的值进行typeof 操作,变量没有类型,值有。
但使用typeof 进行类型判断的时候,它有一个bug, typeof null 返回的是‘object‘ 而不是‘null‘. null 值是‘null‘ 类型的唯一值,它竟然返回了‘object‘. 这时,如果你就想用typeof 操作符来判断一个值是不是null, 你就要再加一个判断了。只有对象和null 执行typeof 操作时候,才返回‘object‘, 只要找出二者的不同就可以了,很简单,所有对象都是真值,null 是假值,!a 是true 就可以区分了。所以使用typeof 判断null的时候,如下
let a = null; (!a && typeof a === ‘object‘) // true
其时 typeof 还一个小问题,就是typeof 一个函数的时候,返回的是一个‘funciton‘,
let a = () => ; console.log(typeof a); // ‘function‘
这可能让人产生误会,误以为‘funciton‘ 也是一种数据类型,其实并不是,所有的函数都是对象,不过这也提供了一个判断函数的简便方法。
当然,typeof 操作符还有一个好处,就是如果一个变量没有声明的话,执行typeof 操作,不会报错,而是返回undefined, 这就是提供了一个安全的操作,因为,如果你直接引用一个没有声明的变量就会报错。有时,你想判断一个变量存不存在,如要写a == undefined, 完了,报错了,引用了一个没有声明的变量a. 如果使用 typeof a == undefined, 没有问题。
数组类型
1, 删除数组元素的时候,不要用delete, 使用delete 可以把数组中的元素及元素在数组中的位置(slot)删除掉, 但不用更新数组的length 长度。
let a = [1, 2]; delete a[0]; console.log(a); console.log(a.length)
下图是chrome 浏览器的返回值。
以上是关于JS 中类型和类型转换的主要内容,如果未能解决你的问题,请参考以下文章