摘要:中的数据类型为什么称为弱类型语言中变量是没有类型的,只有值才有。有哪些数据类型在中,共有七种数据类型,其中,六种是基本原始类型,一种是对象复合引用类型。因此,我们可以写一个函数,用来精确检测类型。
定义 1. 什么是数据类型?
数据类型,就是将数据按照某一规则进行区别时所定义的分类标签。比如说,同样都是汉字组成的词语,要分动词、名词、介词等。
2. 为什么会有数据类型?它出现的意义何在?对数据分类,主要有两个原因:
第一,是为了限制不同种类数据的操作。比如说当你声明一个变量是一个数字,那么,就只能对这个变量进行数字能进行的操作,这在编译代码及排查错误时尤为重要。
第二,由于所有的数据都要存储在计算机中,不同数据的存储位置及所需要的内存大小也不一样,而有了数据类型,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存。
例如大胖子必须睡双人床,就给他双人床,瘦的人单人床就够了。
JavaScript 中的数据类型 1. 为什么称 JavaScript 为弱类型语言?JavaScript 中变量是没有类型的,只有值才有。变量可以随时持有任何类型的值。
举个例子:
// js let a = 4; a = "4"; a = false;
在上面的例子中可以看到:我们声明 a 是一个数字,但是我们在之后将 a 的值又改成了字符串和布尔值(后面会讲这些类型)也并没有什么异常。我们可以看到,变量 a 的类型是随意转变的,这在强类型语言里是不允许的。
因此,判断一门语言是强类型还是弱类型,就看这门语言中一个变量是否可以赋不同数据类型的值。
2. JavaScript 有哪些数据类型?在 JavaScript 中,共有七种数据类型,其中,六种是基本/原始类型,一种是对象/复合/引用类型。
基本类型:
字符串(String):表示一个字符串,如“find”。
数字(Number):表示一个数字,如 45 。
布尔(Boolean):布尔值,包括 false 和 true 。
未定义(undefined):只有一个值,undefined , 表示未给变量赋值。
空值(null):只有一个值, null , 表示空值得关键字。
Symbol(es6新增):表示一个唯一且不可改变的值。
引用类型:
对象(object): 各种值组成的集合。
其中,对象类型还有一些子类型,如数组,函数,JavaScript 的内建函数等。
3. 基本数据类型和复合数据类型有什么区别?主要有两点:
基本类型的数据是不可再拆分的。 这也就是为什么称他为基本类型,就像组成单词的 26 个英文字母、组成数字的 0 -9;而复合类型的数据,是由基本类型组成。比如一个单词,可以由数个字母组成,一个句子,可以由数字、字母及标点复合组成。
它们在计算机中的存储方式不同。计算机存储数据时为了内存及运行速度考虑,往往会对存储做优化,有的会将值本身存储在栈内存中,也有可能会在栈内存中存储一个值的引用,而把值本身存在堆内存中。对于不同的语言,实现起来或许会有不一致,但思想都是如此。
4. JavaScript 中值类型和引用类型的存储方式是怎样的?对于 js 来讲,是没有栈内存的概念的,但是 js 在编译执行代码时,会首先进入一个执行上下文,在执行上下文的创建阶段,会开辟一片区域,用来存储变量和它们的值,这个区域就叫做变量对象。
大概长这个样子:
如上图所示,对于基本类型的变量,他们的变量名和值都会存储在这个变量对象中,而对于 d , 这个引用类型的值,则只是将这个变量的名字和地址存在变量对象中,变量的值是存储在堆内存空间的,这个区别将会在使用时产生很大的差异,我们后面再讲。
5. 如何判断一个数据的数据类型? - typeof 方法声明一个变量,使用 使用 typeof 方法会返回一个唯一的数据类型字符串。但这个方法并不怎么靠谱。
值 | 类型 | typeof 值 |
---|---|---|
23 | number | "number" |
"abc" | string | "string" |
false | boolean | "boolean" |
undefined | undefined | "undefined" |
Symbol() | symbol | "symbol" |
{} | object | "object" |
null | null | "object" |
function(){} | object | "funciton" |
从上表中我们看到,有两处地方和我们预期不一致。
typeof null 返回的是 "object" 而不是 "null"。这是 js 语言设计时的一个 bug, 并且在未来也不会更改。
想要争取判断 null 可以加一个条件:
function typeOf(a) { if(!a && typeof a === "object") return "null"; return typeof a; } typeOf({}); // "object" typeOf(null); // "null"
typeof function(){} === "function", 这是因为function 作为 js 的一等公民,是可以调用的对象,设计者认为有必要将它和普通对象区别开来。
- Object.prototype.toString.call() 方法除了 typeof 方法外,调用 Object.prototype.toString.call() 方法 也可以返回一个包含数据类型的字符串,并且更为准确。
值 | 类型 | Object.prototype.toString.call(值) |
---|---|---|
23 | number | "[object Number]" |
"abc" | string | "[object String]" |
false | boolean | "[object Boolean]" |
undefined | undefined | "[object Undefined]" |
Symbol() | symbol | "[object Symbol]" |
{} | object | "[object Object]" |
null | null | "[object Null]" |
function(){} | object | "[object Function]" |
[] | object | "[object Array]" |
从上面们可以看出,这方法对于类型的检测更加精确。
因此,我们可以写一个函数,用来精确检测类型。
function getClass (a) { const str = Object.prototype.toString.call(a) return /^[object (.*)]$/.exec(str)[1] } getClass(null) // "Null"; ...
关于数据类型,就先说到这里,并没有深入到每一种类型中去讲,感觉没有必要,关于细节有很多教程。我要做的,是让大家从整体上来看数据类型在 JavaScript 中的表现,这将有助于大家理解后面更加复杂的知识。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/99350.html
摘要:的垃圾回收器,进行回收。它们的数据就存放在堆内存中,大小不一定,动态分配内存,可随时修改。引用类型的变量存的是其在堆内存中的地址,值的读取,就是读取这个内存地址中储存的内容。 这东西还是很重要的,你要是搞懂了,就会去除很多困惑,比如不知道大家在学习js 的时候,有没有对 基础类型 和 引用类型 感到困惑过,两者之间 表现的不同之处。 js 不同其他编程语言,它是脚本语言。所以,它的数...
文章目录 强烈推荐系列教程,建议学起来!! 一.pycharm下载安装二.python下载安装三.pycharm上配置python四.配置镜像源让你下载嗖嗖的快4.1pycharm内部配置 4.2手动添加镜像源4.3永久配置镜像源 五.插件安装(比如汉化?)5.1自动补码神器第一款5.2汉化pycharm5.3其它插件 六.美女背景七.自定义脚本开头八、这个前言一定要看九、pyt...
摘要:举个例子在上面的例子可以看到,我们声明是一个数字,但是我们在之后将的值又改成了字符串和布尔值后面会讲这些类型。基本类型字符串表示一个字符串,如。因此,我们可以写一个函数,用来精确检测类型。 showImg(https://segmentfault.com/img/remote/1460000017309509?w=850&h=572); 定义 1. 什么是数据类型? 数据类型,就是将...
阅读 3256·2023-04-26 02:10
阅读 2879·2021-10-12 10:12
阅读 4556·2021-09-27 13:35
阅读 1518·2019-08-30 15:55
阅读 1057·2019-08-29 18:37
阅读 3422·2019-08-28 17:51
阅读 1953·2019-08-26 13:30
阅读 1190·2019-08-26 12:09