位置: 编程技术 - 正文

浅析JavaScript基本类型与引用类型(javascript基于)

编辑:rootadmin

对于 JavaScript 类型,可以简单地概括为:相对于强类型语言来说,它是弱(松散)类型的语言;有基本类型和引用类型,他们是区别是一个有固定空间存在于栈内存中,一个没有固定空间保存在堆内存中并且在栈内存中保存了一个指向实现位置的指针。

市面上很多书都有不小的篇幅在讲。这篇文章会讲几个方面,这些方面可能会需要你对 JavaScript 已经有了一些简单的了解,特别是 JavaScript 的类型。如果还不一解,可以随手拿起一本关于 JavaScript 的书翻翻,再来看本文。

一、基本类型与引用类型

1.基本类型:Undefined / Null / Boolean / Number / String2.引用类型:Object / Array / Function / Date / RegExp / Error / Map / Set …

为什么引用类型没有枚举完呢,因为这里面你了解这么多就够了,至少在我讲的这篇中这些已经足够。其他的可能很少会用到,甚至像 Map 、Set 这样的也不是所有浏览器都支持。

二、JavaScript 类型的判断

在 JavaScript 有两个 operator 可以用以判断类型。他们是 typeof 和 instanceof,不过圈子很小,它们混的可不是那么好,是出了名的不靠谱。少数情况也是对的,很多情况下是不靠谱的。看看就知道了:

呃~ 可能很多初学的 JavaScript 程序员会因此爆粗口。还大部分人在需要用 JS 的时候已经有了 jQuery 等这样的库,他们都做了封装,让你可以方便地检测类型。当然,事实上要检测也不麻烦,因为那句「在 JavaScript 中,一切都是对象」,当然像很多文档中说到的,undefined 其实和 NaN, Infinity 都只是一个全局属性。你大概知道就可以了。但「对象」可以帮到我们:

这样的话,我们就可以利用 is 这个函数来帮我们搞定类型判断了,并且这个简单的函数有很好的兼容性,可以用到你的项目中去。情况如:

三、JavaScript 类型的转换

在 JavaScript 中,变量(属性)的类型是可以改变的。最常看到的是 String 与 Number 之间的转换。如何把 1 + '2' 变成 呢?这里面有必要理解一下 + 号 operator,它是一个数学运算符,同时也是 JavaScript 中的字符串连字符。所以新手会经常会看到一个有趣的现象,当使用 + 号的时候有时计算出来的不是想要的,而用 - 号却总能得到「正确」的答案。这里面其实就是因为 + 的双重角色导致的。在上面的代码中,可以注意到第二条表达式在 String 前面运用了一个 + 号,强制把它的类转换为 Number。而对于 JavaScript 的类型转换理解,大多数情况下,只要理解 + 具有双重角色就可以了。其他的可以理解类,类似都是可以用赋值/重载来修改的,甚至包括 Error:

四、JavaScript 引用类型这一点是本文的一个难点。相于基本类型,引用可以为其添加属性和方法;引用类似的值是一个引用,把一个引用类型的值赋给一个变量,他们所指向的是同一存储在堆内存中的值。变量(属性)可以重载,但复制会是一件很有趣的事情,后面我们会详细来说。

1. 添加属性和方法

下面的代码我们将会看到,假设我们对一个基本类似赋值,它并不会报错,但在获取的时候却是失效的:

2. 引用类型值的操作

由于引用类型存储在栈内存中的是一个引用,那么当我们指向的同一个原始的值,对值的操作将会影响所有引用;这里有一个例是,重新赋值(并非对值的直接操作)会重新创建一个对象,并不会改变原始值。比如:

3. 引用类型值的复制

对原始值的操作会影响所有引用,而这不一定是我们想要的,有时候我们需要复制一个全新的对象,操作的时候不影响其他引用。而一般情况也,像 Date / Function / RegExp … 都很少有具体的操作,主要是像 Array 和 Object 会有添加项、属性等操作。所以我们主要需要理解的是如何复制 Array 和 Object 对象。

3.1 数组的复制

在 Array 对象中,存在 slice 方法返回一个截取的数组,在 ES5 中 filter 等也返回一个新的数组,那么我们可能利用这个方法来进行复制。3.2 对象的复制

在 Array 的复制中我们使用的是 slice 方法,实际上对于 Array 和 Object 中都可以利用 for ... in 循环来进行遍历并赋值来进行复制。

3.3 Shadow / Deep Copy

像上面的操作,就是我们常说的浅拷贝(Shadow Copy)。不过在 Array 和 Object 都可以有多层(维),像这样的拷贝只考虑到最上面一层的值,在可能存在的值中的 Array 和 Object 都还是指向了原始对象。比如:那么如何做呢?来一个 copy() 函数解决这个问题:这样,我们就可以通过 copy(obj, isDeep) 函数来复制一个 Array 或者 Object 。可以测试一下:

到此。你基本上要了解的关于类型的比较难的点,应该是都基本了解了。当然,复制是最麻烦的一个点,除了经常需要操作的 Array 和 Object 来说,还有 Date / Function / RegExp 的复制。

推荐整理分享浅析JavaScript基本类型与引用类型(javascript基于),希望有所帮助,仅作参考,欢迎阅读内容。

浅析JavaScript基本类型与引用类型(javascript基于)

文章相关热门搜索词:javascript基于什么的语言,javascript基础入门案例,javascript的基础类型,javascript基于,javascript基于,javascript基于什么的语言,javascript基础,javascript基于,内容如对您有帮助,希望把文章链接给更多的朋友!

详解JavaScript语法对{}处理的坑爹之处 JavaScript的语法有多坑,算是众人皆知了。先来上张图代码如下:{}+[];//0[]+{};//"[objectObject]"{}+[]==[]+{};//false({}+[]==[]+{});//true这么蛋疼的语法坑估计也只有Ja

javascript中attribute和property的区别详解 DOM元素的attribute和property很容易混?x在一起,分不清楚,两者是不同的东西,但是两者又联系紧密。很多新手朋友,也包括以前的我,经常会搞不清楚。a

javascript中的throttle和debounce浅析 throttle我们这里说的throttle就是函数节流的意思。再说的通俗一点就是函数调用的频度控制器,是连续执行时间间隔控制。主要应用的场景比如:1.鼠标

标签: javascript基于

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

上一篇:浅析javascript中function 的 length 属性

下一篇:详解JavaScript语法对{}处理的坑爹之处(javascript语言介绍)

  • 二手房交易需缴纳哪些费用
  • 挂靠别的公司都需要交什么税
  • 增值税普通
  • 以前年度损益调整在借方是什么意思
  • 收款和出库哪个借方哪个贷方?
  • 购进灭火器材怎么入账
  • 期末存货采用成本与可变现净值孰低法
  • 广告发布费属于什么征税项目
  • 无形资产处置收益计入
  • 小规模纳税人建筑服务税率是多少
  • 税局代开专票对方隔月退回重开如何做账务处理呢?
  • 软件著作权销售好做吗
  • 发票开错了收入增多了当月分录如何红冲?
  • 应收账款周转率越大越好还是越小越好
  • 出口发票税率为0还能退税吗
  • 房贷可以抵个人所得税吗
  • 含有商品编码的增值税普通发票如何开具?
  • 企业的其他业务收入
  • 购入的商品用于捐赠怎么做分录
  • 酒店招募
  • 资产负债率高说明长期偿债能力强吗
  • 汇算清缴退税计入什么科目
  • 新公司税控盘购买流程
  • 补税后算偷税漏税吗
  • 新企业办理地税登记流程
  • php写文件函数
  • AI:ModelScope(一站式开源的模型即服务共享平台)的简介、安装、使用方法之详细攻略
  • 一般纳税人在什么情况下,不可以开具增值税专用发票
  • spring ioc di aop
  • php如何入门
  • 仓库发货打包以及建议年终总结
  • 现金报销医药费
  • 零申报未申报可以不处罚吗
  • 预收款销售商品如何与业务员对账
  • 固定资产未入账的定性依据
  • 接受捐赠如何进项
  • oracle sql 不等于某个字符
  • 企业缴纳个人所得税客户端
  • 公司与公司的往来款计入什么科目
  • 制造费用是费用吗?
  • 工会会员缴纳的医疗互助金列工会什么科目
  • 利息发票如何做会计分录
  • 税务房屋租赁发票的开具规定
  • 银行电子承兑汇票到期怎么兑现
  • 公司对公账户没钱了辞退员工
  • 出差补贴如何账务处理
  • 劳务费是否属于工资
  • 企业银行贷款保证金多少
  • 货物出去没有出口报关可以补吗
  • 客观原因怎么写
  • 公司收到赔偿款要交增值税吗
  • 医院床单被套尺寸
  • 会务费发票开普票还是专票
  • 会计凭证的摘要 报销 保险费用
  • 物业管理企业应具备哪些条件
  • 仓库记录
  • sql server 性能调优
  • mysql的基本sql语句
  • xp附件游戏
  • ubuntu16.04lts
  • win10怎么禁止用户安装程序
  • 在windows xp
  • mac电脑 删除废纸篓里的指定文件
  • ·exe病毒
  • ubuntu下添加新用户
  • speedmgr.exe - speedmgr是什么进程 有什么用
  • win8鼠标设置在哪
  • cad90度角
  • js修改内容
  • 用shell脚本实现菜单页面
  • shell脚本读取输入使用什么命令
  • javascript初级教程
  • 税务局窗口业务
  • 深圳罗湖区公安局长安慧君简历
  • 福建省国家税务总局稽查局局长
  • 86年的2020年是多少岁
  • 重庆市非住宅交易税费
  • 北京市延庆区城管执法局
  • 税收筹划与避税的性质相同
  • 税控卡丢失怎么办
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设