位置: 编程技术 - 正文

跟我学习javascript的基本类型和引用类型(java script入门)

编辑:rootadmin

推荐整理分享跟我学习javascript的基本类型和引用类型(java script入门),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:java script课程,教程java,java教程,java script课程,java script,java script怎么学,java script,java learning,内容如对您有帮助,希望把文章链接给更多的朋友!

一、基本类型和引用类型

基本的数据类型有5个:undefined,boolean,number,string,null

(令人困惑的是,对null类型进行typeof操作得到的结果为“object”,然而,ECMAScript标准描述其为一个独特的类型。)

为了便于操作基本类型值,ECMAScript还提供了三个特殊的引用类型:Boolean、Number和String,标准库提供了构造函数来封装布尔值、数字和字符串作为对象。这些类型与其他引用类型相似,同时也具有与各自的基本包装类型相应的特殊行为。实际上,每当读取一个基本类型值时,后台就会创建一个对应的基本包装类型的对象,从而让我们能够调用一些方法来操作这些数据。

但是不同于原始的字符串,String对象是一个真正的对象。

这个例子中的变量s1包含一个字符串,字符串当然是基本类型值。而下一行调用了s1的substring()方法,并将返回的结果保存在s2中。我们知道,基本类型值不是对象,因此从逻辑上讲,它们不应该有方法(但是它们确实有方法)。其实,为了让我们实现这种直观的操作,后台已经自动完成了一系列的处理。当第二行代码访问s1时,访问过程处于一种读取模式,也就是从内存中读取这个字符串的值。而在读取模式中访问字符串时,后台都会自动完成下列处理:

(1)创建String类型的一个实例。

(2)在实例上调用指定方法。

(3)销毁这个实例。

可以使用以下代码表示:

经过此番处理,基本的字符串值就变得跟对象一样了。而且,上面三个步骤也适用于Boolean和Number类型对应的布尔值和数字值。

二、生命周期

引用类型与基本包装类型的主要区别就是对象的生命周期。使用new操作符创建的引用类型的实例,在执行流离开当前作用域之前都一直保存在内存中。而自动创建的基本包装类型的对象,只存在于这一行代码的执行期(瞬间),然后立即销毁。这就意味着我们不能在运行时为属性添加属性和方法。

当然,可以显示调用Boolean、Number和String来创建基本包装类型的对象,不过,不帮不建议这么做。对基本包装类型的实例调用typeof会返回”object”,而且所有基本包装类型的对象都会被转化为布尔值true。。

值得注意的是,使用new调用基本包装类型的构造函数,与直接调用同名的转型函数是不一样的。

三、基本类型特点

1.基本类型的值是不可变得:

任何方法都无法改变一个基本类型的值,比如一个字符串:

会发现原始的name并未发生改变,而是调用了toUpperCase()方法后返回的是一个新的字符串。 再来看个:

通过上面代码可知,我们不能给基本类型添加属性和方法,再次说明基本类型时不可变得;

2.基本类型的比较是值的比较:

只有在它们的值相等的时候它们才相等。 但你可能会这样:

它们不是相等吗?其实这是类型转换和 == 运算符的知识了,也就是说在用==比较两个不同类型的变量时会进行一些类型转换。像上面的比较先会把true转换为数字1再和数字1进行比较,结果就是true了。 这是当比较的两个值的类型不同的时候==运算符会进行类型转换,但是当两个值的类型相同的时候,即使是==也相当于是===。

3.基本类型的变量是存放在栈区的(栈区指内存里的栈内存)

假如有以下几个基本类型的变量:

那么它的存储结构如下图:

跟我学习javascript的基本类型和引用类型(java script入门)

栈区包括了变量的标识符和变量的值。

四、引用类型特点

引用类型会比较好玩有趣一些。

javascript中除了上面的基本类型(number,string,boolean,null,undefined)之外就是引用类型了,也可以说是就是对象了。对象是属性和方法的集合。也就是说引用类型可以拥有属性和方法,属性又可以包含基本类型和引用类型。来看看引用类型的一些特性:

1).引用类型的值是可变的

我们可为为引用类型添加属性和方法,也可以删除其属性和方法,如:

上面代码说明引用类型可以拥有属性和方法,并且是可以动态改变的。

2).引用类型的值是同时保存在栈内存和堆内存中的对象

javascript和其他语言不同,其不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间,那我们操作啥呢? 实际上,是操作对象的引用,所以引用类型的值是按引用访问的。

准确地说,引用类型的存储需要内存的栈区和堆区(堆区是指内存里的堆内存)共同完成,栈区内存保存变量标识符和指向堆内存中该对象的指针,也可以说是该对象在堆内存的地址。 假如有以下几个对象:

则这三个对象的在内存中保存的情况如下图:

3).引用类型的比较是引用的比较

上面讲基本类型的比较的时候提到了当两个比较值的类型相同的时候,相当于是用 === ,所以输出是true了。再看看:

可能你已经看出破绽了,上面比较的是两个字符串,而下面比较的是两个对象,为什么长的一模一样的对象就不相等了呢?

别忘了,引用类型时按引用访问的,换句话说就是比较两个对象的堆内存中的地址是否相同,那很明显,person1和person2在堆内存中地址是不同的:

所以这两个是完全不同的对象,所以返回false;

五、简单赋值

在从一个变量向另一个变量赋值基本类型时,会在该变量上创建一个新值,然后再把该值复制到为新变量分配的位置上:

此时,a中保存的值为 ,当使用 a 来初始化 b 时,b 中保存的值也为,但b中的与a中的是完全独立的,该值只是a中的值的一个副本,此后,这两个变量可以参加任何操作而相互不受影响。

也就是说基本类型在赋值操作后,两个变量是相互不受影响的。

六、对象引用

当从一个变量向另一个变量赋值引用类型的值时,同样也会将存储在变量中的对象的值复制一份放到为新变量分配的空间中。前面讲引用类型的时候提到,保存在变量中的是对象在堆内存中的地址,所以,与简单赋值不同,这个值的副本实际上是一个指针,而这个指针指向存储在堆内存的一个对象。那么赋值操作后,两个变量都保存了同一个对象地址,则这两个变量指向了同一个对象。因此,改变其中任何一个变量,都会相互影响:

它们的关系如下图:

因此,引用类型的赋值其实是对象保存在栈区地址指针的赋值,因此两个变量指向同一个对象,任何的操作都会相互影响。

标签: java script入门

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

上一篇:跟我学习javascript的隐式强制转换(java script入门)

下一篇:浅析JavaScript访问对象属性和方法及区别(js访问thymeleaf值)

  • 纳税人进口货物应当自海关填发税款
  • 增值税和购置税是一个东西吗
  • 8.会计核算方法具体包括哪些内容?
  • 哪些行业不能开具增值税专用发票
  • 进料加工委托 加工费发票怎么开
  • 商品削价准备怎么算
  • 资产损失申报扣除
  • 项目部租房办公应计入什么费用
  • 工程未竣工如何结算
  • 信用贷的基本准入要求
  • 系统技术维护费计入什么科目
  • 将自建的厂房对外转让需要缴纳增值税吗
  • 确认一个会计项目应符合的基本标准有
  • 无形资产摊销是增加还是减少
  • 财产保险费发票税率
  • 我们4月10日
  • 现金抵扣到底要不要缴纳增值税?
  • 公益性捐赠公告
  • 金税盘和税控盘和ukey
  • 总资产周转率多少算高
  • 税务实名认证怎么认证
  • 个人承包劳务合法吗?
  • 出口运保佣账务处理
  • 报税文件是纳税申报表吗
  • 公益性捐赠所得税处理
  • 费用报销操作流程
  • 生产成本结转库存商品的数量
  • linux禁止ip访问80端口
  • PHP:proc_terminate()的用法_命令行函数
  • 最好卖的游戏机排行榜
  • php实现购物车功能的方法
  • 汇算清缴期结束后,税务机关发现企业
  • php 正则函数
  • 支付劳务费时是什么科目
  • 公司外部人员的差旅费入什么科目
  • 北坡镇人民政府
  • 顺流交易逆流交易区别
  • 中小企业应交税费
  • 地方各项基金费(工会经费)可以不申报吗
  • auto.js 教程
  • php静态函数
  • 自动驾驶感知决策控制
  • oc底层原理
  • Windows7配置启用ca证书
  • 香港企业的所得税怎么算
  • 用友t6模块
  • 销项税大于进项税当月交税吗
  • 注册资金到位时间填多少年最好
  • 帝国cms移动端
  • 汉诺塔问题动画演示
  • 电子税务局如何添加办税人员
  • sql优化口诀
  • 工程服务费税率是多少2023
  • 专职独立研发企业是指
  • 金融企业应当按照交易或事项的实质和经济现实
  • 异地预缴税款怎么抵扣
  • 销售货物收入指企业销售什么取得的收入
  • 以公允价值计量的金融资产
  • 计提坏账准备需要哪些资料
  • 待摊费用属于流动负债吗
  • 短期薪酬主要包括
  • mysql 5.7.13 winx64安装配置方法图文教程(win10)
  • window 开机启动
  • linux yum命令详解
  • win8怎么添加wifi
  • win7任务管理器怎么调回原来样子
  • Android游戏开发读后感
  • opengl顶点坐标纹理坐标关系
  • jquery easyui开发指南
  • vue项目中使用scss
  • nodejs promise.all
  • python遍历列表判断相同元素
  • unity androidx
  • js实现超精简的快捷键
  • javascript的for循环
  • 使用java
  • 国税系统公务员政审父母超生合格吗
  • 个人所得税全年不到60000,单月超过
  • 北京摇号摇中了能过户吗
  • 无锡车辆购置税缴纳地点
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设