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 中类型和类型转换的主要内容,如果未能解决你的问题,请参考以下文章

对象不能从 DBNull 转换为其他类型。

JS 中类型和类型转换

js字符转换为数字

js中怎么把日期转换成数字?

js常用代码片段(更新中)

JS 字符串转换成数字