位置: 编程技术 - 正文

详解JavaScript基本类型和引用类型(js基础)

编辑:rootadmin

推荐整理分享详解JavaScript基本类型和引用类型(js基础),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:javascript基础入门教程,javascript的基础类型有哪些,javascript基础,javascript基本语句,js基础,javascript基于,javascript基础,javascript基于,内容如对您有帮助,希望把文章链接给更多的朋友!

一、值的类型 早在介绍JS的数据类型的时候就提到过基本类型和引用类型,不过在说两种类型之前,我们先来了解一下变量的值的类型。在ECMAScript中,变量可以存在两种类型的值,即原始值和引用值。(1)原始值 存储在栈中的简单数据段,也就是说,它们的值直接存储在变量访问的位置。(2)引用值 存储在堆中的对象,也就是说,存储在变量处的值是一个指针,指向存储对象的内存处。 为变量赋值时,ECMAScript的解释程序必须判断该值是原始类型,还是引用类型。要实现这一点,解释程序则需尝试判断该值是否为ECMAScript的基本类型之一,即Undefined类型、Null类型、Boolean类型、Number类型和String类型。由于这些基本类型占据的空间是固定的,所以可将他们存储在较小的内存区域 - 栈中。这样存储便于迅速查寻变量的值。 在许多语言中,字符串都被看作引用类型,而非基本类型,因为字符串的长度是可变的。ECMAScript打破了这一传统。 如果一个值是引用类型的,那么它的存储空间将从堆中分配。由于引用值的大小会改变,所以不能把它放在栈中,否则会降低变量查寻的速度。相反,放在变量的栈空间中的值是该对象存储在堆中的地址。地址的大小是固定的,所以把它存储在栈中对变量性能无任何负面影响。如下图所示:

二、基本类型 ECMAScript有5种基本类型,即Undefined类型、Null类型、Boolean类型、Number类型和String类型。ECMA-把术语类型定义为值的一个集合,每种基本类型定义了它包含的值的范围及其字面量表示形式。 ECMAScript提供了typeof运算符来判断一个值是否在某种类型的范围内。可以用这种运算符判断一个值是否表示一种基本类型:如果它是基本类型,还可以判断它表示哪种基本类型。 基本数据类型和操作符typeof我们在前面的博文中也经常使用到。详细了解的话可以参考这篇文章:详解JavaScript的变量和数据类型。

三、类型转换 所有程序设计语言最重要的特征之一是具有进行类型转换的能力。ECMAScript给开发者提供了大量简单的类型转换方法。大部分类型具有进行简单转换的方法,还有几个全局方法可以用于更复杂的转换。无论哪种情况,在ECMAScript中,类型转换都是简短的一步操作。(1)转换成字符串 ECMAScript的Boolean值、数字和字符串的原始值的有趣之处在于它们是伪对象,这意味着它们实际上具有属性和方法。例如,要获得字符串的长度,可以采用下面的代码:

尽管 "red" 是基本类型的字符串,它仍然具有属性length,用于存放字符串的大小。总而言之,3 种主要的原始类型Boolean 值、数字和字符串都有 toString() 方法,可以把它们的值转换成字符串。您也许会问,“字符串还有toString()方法吗,这不是多余吗?”是的,的确如此,不过ECMAScript定义所有对象都有toString()方法,无论它是伪对象,还是真对象。因为String类型属于伪对象,所以它一定有toString()方法。1)Boolean 类型的toString()方法只是输出 "true" 或 "false",结果由变量的值决定:

2)Number类型的toString()方法比较特殊,它有两种模式,即默认模式和基模式。采用默认模式,toString()方法只是用相应的字符串输出数字值(无论是整数、浮点数还是科学计数法),在默认模式中,无论最初采用什么表示法声明数字,Number 类型的 toString() 方法返回的都是数字的十进制表示。因此,以八进制或十六进制字面量形式声明的数字输出的都是十进制形式的。如下所示:

采用Number类型的 toString()方法的基模式,可以用不同的基输出数字,例如二进制的基是2,八进制的基是8,十六进制的基是。 基只是要转换成的基数的另一种加法而已,它是 toString() 方法的参数:

详解JavaScript基本类型和引用类型(js基础)

(2)转换成数字 ECMAScript提供了两种把非数字的原始值转换成数字的方法,即parseInt()和parseFloat()。前者把值转换成整数,后者把值转换成浮点数。只有对String类型调用这些方法,它们才能正确运行;对其他类型返回的都是NaN。1)parseInt() 在判断字符串是否是数字值前,parseInt()和 parseFloat()都会仔细分析该字符串。parseInt()方法首先查看位置0处的字符,判断它是否是个有效数字;如果不是,该方法将返回NaN,不再继续执行其他操作。但如果该字符是有效数字,该方法将查看位置1处的字符,进行同样的测试。这一过程将持续到发现非有效数字的字符为止,此时parseInt()将把该字符之前的字符串转换成数字。 例如,如果要把字符串 "red" 转换成整数,那么parseInt()将返回,因为当它检查到字符r 时,就会停止检测过程。 字符串中包含的数字字面量会被正确转换为数字,比如 "0xA" 会被正确转换为数字。不过,字符串 ".5" 将被转换成,因为对于整数来说,小数点是无效字符。

parseInt()方法还有基模式,可以把二进制、八进制、十六进制或其他任何进制的字符串转换成整数。基是由parseInt()方法的第二个参数指定的。

2)parseFloat()方法 parseFloat()方法与parseInt()方法的处理方式相似,从位置0开始查看每个字符,直到找到第一个非有效的字符为止,然后把该字符之前的字符串转换成整数。不过,对于这个方法来说,第一个出现的小数点是有效字符。如果有两个小数点,第二个小数点将被看作无效的。parseFloat()会把这个小数点之前的字符转换成数字。这意味着字符串".."将被解析成.。 使用parseFloat()方法的另一不同之处在于,字符串必须以十进制形式表示浮点数,而不是用八进制或十六进制。该方法会忽略前导0,所以八进制数 将被解析为。对于十六进制数0xA,该方法将返回 NaN,因为在浮点数中,x不是有效字符。此外,parseFloat() 方法也没有基模式。 下面是使用 parseFloat() 方法的一些示例:

(3)强制类型转换 使用强制类型转换来处理转换值的类型。使用强制类型转换可以访问特定的值,即使它是另一种类型的。ECMAScript 中可用的3种强制类型转换如下:

1)Boolean(value) - 把给定的值转换成 Boolean 型; 2)Number(value) - 把给定的值转换成数字(可以是整数或浮点数); 3)String(value) - 把给定的值转换成字符串;

这些应该很好理解,在学习那些高级程序设计语言的时候经常会能使用到这些。四、引用类型 引用类型通常叫做类,也就是说,遇到引用值,所处理的就是对象。从传统意义上来说,ECMAScript并不真正具有类。事实上,除了说明不存在类,在ECMA-中根本没有出现“类”这个词。ECMAScript定义了“对象定义”,逻辑上等价于其他程序设计语言中的类。 对于JS对象的详细解释在前面的博文中也有,参考:轻松学习JavaScript九:JavaScript对象和数组。 我们再来了解一个判断引用类型的操作符instanceof,在使用typeof运算符时采用引用类型存储值会出现一个问题,无论引用的是什么类型的对象,它都返回 "object"。ECMAScript引入了另一个Java运算符 instanceof 来解决这个问题。instanceof运算符与typeof运算符相似,用于识别正在处理的对象的类型。与typeof方法不同的是,instanceof方法要求开发者明确地确认对象为某特定类型。 例如:

这段代码问的是“变量oStringObject是否为 String 对象的实例?”oStringObject的确是 String对象的实例,因此结果是 "true"。尽管不像typeof方法那样灵活,但是在typeof方法返回 "object" 的情况下,instanceof方法还是很有用的。 此外,ECMAScript还有伪对象一说,也就是其他的基本类型,使用new创建时也是可以作为对象的,比如:String对象,Boolean对象和Number对象。它们是基本类型的引用类型。详细了解参考:ECMAScript引用类型。ECMAScript还包含了许多对象,本地对象,内置对象和宿主对象。这些我们会在后面的面向对象的时候具体了解。五、复制变量值 在变量复制方面,基本类型和引用类型有所不同,基本类型是复制的是值本身,而引用类型复制的是地址。 我们来看具体的实例:

输出的结果为:Amy Lee

输出的结果为:Amy Amy

标签: js基础

本文链接地址:https://www.jiuchutong.com/biancheng/387170.html 转载请保留说明!

上一篇:深入浅析react native es6语法(react navigate)

下一篇:JS实现字符串转日期并比较大小实例分析(js 字符串转字节)

  • 职工的补助金需交税吗
  • 小规模纳税人未开票收入如何填申报表
  • 税控盘丢失需要罚款吗
  • 金融企业逾期贷款税前扣除
  • 固定资产处置怎么计算
  • 4s店试驾车转卖怎么开票
  • 不开票不走公账的后果
  • 少交了增值税怎么补
  • 离职补偿金如何计算
  • 所得税税负率是多少
  • 营改增后建筑业税率变化情况
  • 出口退税申报显示疑点跳过可以转正式申报吗
  • 教育培训机构涉税问题
  • 金蝶kis迷你版操作手册
  • 初级考试备考计划
  • 直接收款涉及增值税吗
  • 定期存款利息收入现金流
  • 福利费开成增值税专用发票怎么办
  • 装修费怎么摊销,租期两年
  • 库存商品成本变动率
  • 房地产企业售房印花税
  • 类似股票期货的产品
  • 暗格里的秘密电视剧彩蛋百度网盘
  • win10开机内存占用60% 8g占用过高
  • u盘如何装系统win7
  • 深入php:面向对象、模式与实践
  • php foreach()
  • 职工医疗保险补交6万与交居民每交300哪个合算?
  • el-input value
  • 取得抵债资产的方式
  • 企业现金流量表怎么分析
  • 前后端交互用什么技术
  • 布兹洛夫
  • php 断点续传
  • 浅谈socket同步和异步、阻塞和非阻塞、I/O模型
  • 微信小程序开发一个多少钱
  • php批量替换字符串
  • 外经证还有几天到期延期需要的资料
  • 退回社保怎么做分录
  • 按摊余成本计量的应收账款
  • 登记银行存款日记账的凭证有哪些
  • 所得税多交了不退会不会来查账
  • mysql用户授权信息保存在哪里
  • 购买实验材料入什么科目
  • 增值税专用发票丢了怎么补救
  • sql去除重复项
  • 没进项发票的开销项发票多少税?
  • 个人劳务费免增值税吗
  • 工程物资怎么入账成本
  • 应收票据周转率公式
  • 润滑油消费税征收环节税屋
  • 金融资产减值损失
  • 差旅费政策
  • 体检费可以开个人吗?
  • 短期投资怎么记账
  • sqlserver2008r2创建实例
  • linux 二进制转十六进制
  • win7的运行命令在哪里
  • 360安全卫士中心未完全开启
  • windows10周年更新
  • win8.1快速启动
  • 鼠标的指针
  • linux系统怎么弄
  • win7创建一个标准用户账户
  • win10系统打开文件夹就不停的闪
  • jquery手风琴折叠菜单
  • jquery虚拟dom
  • android jdk下载
  • 批量压缩命令
  • python内置函数用来打开或创建文件并返回文件对象
  • 浅谈python中的实例方法、类方法和静态方法
  • nodejs cli
  • unity ulua
  • windows捕获文件夹
  • jQuery EasyUI Tab 选项卡问题小结
  • 税法 农产品增值税题目及答案
  • 水上公安分局
  • 现行增值税税率表2023
  • 美国企业所得税税率2022
  • 计算出口退税的免抵税额,不计征城市维护建设税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设