位置: 编程技术 - 正文

深入探讨javascript中的数据类型(深入探讨近义词)

编辑:rootadmin

推荐整理分享深入探讨javascript中的数据类型(深入探讨近义词),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:深入探讨人生,深入探讨人生是什么意思,深入探讨的成语,深入探讨英文,深入探讨英文,深入探讨是什么意思,深入探讨人生是什么意思,深入探讨英文,内容如对您有帮助,希望把文章链接给更多的朋友!

学一门编程语言,无非两方面:一是语法,二是数据类型。类C语言的语法不外乎if、while、for、函数、算术运算等,面向对象的语言再加上object。语法只是语言设计者预先做的一套规则,不同语言语法不尽相同,但都有一些共通点,对于熟悉一两门编程语言的人,学其他的编程语言时,语法往往不是问题(当然,如果你一直学的是类C语言,那么首次接触lisp时肯定也要花些时间),学习的重点往往是数据类型及其相关操作上,不是有句老话:“数据结构+算法=程序”!其次,有些语言的语法本身就存在设计问题(javascript更甚),我们没必要深究这些点,当然,如果你自诩geek,可以把玩把玩。

本文将对javascript中的数据类型做一个详尽的介绍。

弱类型 vs 强类型

鉴于javascript的设计理念,javascript被设计成一种弱类型的语言。说到这里,难免要说一下,弱类型与强类型的区别。一些人会误以为这两者的差别就是“强类型的语言在声明一个变量时需要指明它的类型,而弱类型的则不用”。其实这种观点是错误的。比如下面这个Java代码片段:

编译器是怎么知道.length是合法的表达式呢?这是因为编译器知道s的数据类型为String,当调用String的getBytes方法时,返回值的数据类型为byte[],所以.length是合法的表达式。这两者真正的区别是:

在强类型的语言,每个表达式的类型都能够在编译时确定,并且只允许适用于该类型的操作;弱类型的语言允许对任意类型施加任何操作,只是这个操作有可能在运行时报错。数据类型

根据ECMAScript 5.1的规范,javascript中共有六种数据类型,分别为:Undefined, Null, Boolean, Number, String、Object。前五种属于基本类型,最后一种属于对象类型。

基本数据类型

Undefined类型只有一个值,为undefined,意味着“空值(no value)”,适用于所有数据类型。Null类型只有一个值,为null,意味着“空对象(no object)”,只适用于对象类型。Boolean类型有两个值,为true与falseNumber类型的值是遵循IEEE 标准的位浮点数的集合,类似于Java的double。没有整型数据结构。此外还包含三个特殊的值:NaN、Infinity、-InfinityString类型的值是有穷个Unicode字符的集合。必须用'或"括起来。

null与undefined

null与undefined都表示“没有值(non-value)”的概念,如果严格区分:- null表示空- undefined表示不存在。没有初始化的变量、函数中缺失的参数、函数没有显式return值时都为此值

在其他语言中,一般只用一个null来表示空值,javascript中为什么多了个undefined呢?这是历史原因造成的:

javascript采用了Java的语法,把类型分为了基本类型与对象类型,Java中用null来表示空对象,javascript想当然的继承了过来;在C语言中,null在转为数字时为0,javascript也采取同样的方式:

在javascript1.0时,还没有异常处理(exception handling),对于一些异常情况(没有初始化的变量、调用函数时缺失的参数等),需要标明为一种特殊的值,null本来是个很好的选择,但是Brendan Eich同时想避免下面两件事:- 这个特殊值不应该有引用的特性,因为那是对象特有的- 这个特殊值不应该能转为0,因为这样不容易发现程序中的错误基于这两个原因,Brendan Eich选择了undefined,它可以被强转为NaN。

两者在于JSON对象打交道时,结果也迥然不同:

深入探讨javascript中的数据类型(深入探讨近义词)

对象类型

javascript作为一门脚本语言,本身功能十分精简,很多功能(文件读写、网络等)都是由宿主环境提供。宿主环境与javascript语言的桥梁是对象,宿主环境通过提供一系列符合javascript语法的对象,提供各种各样的功能。

在javascript面向对象编程这篇文章(如果你不知道prototype是什么,强烈建议看看这篇文章)里,我多次强调了对象在javascript中就是一系列的键值对,就像Java中的HashMap一样,不过,javascript中对象的属性可以有一些描述符(property descriptor),这在HashMap中是没有的。

属性描述符

属性描述符分为两类:

数据描述符(data descriptor),包含一系列boolean值,用以说明该属性是否允许修改、删除。访问描述符(accessor descriptor),包含get与set函数。这两种描述符都是对象,它们都拥有下面两个boolean属性:

configurable 用以指定该描述符是否允许修改、删除。默认为false。enumerable 用以指定在遍历对象(使用for...in循环或Object.keys方法)的属性时,是否访问该属性。默认为false。除了上面这两个共有属性外,数据描述符还有下面两个属性:- value 用以指定该属性的值,默认为undefined- writable 用以指定该属性的值是否允许改变该属性的值,默认为false

访问描述符还有下面两个属性:- get 用以指定访问该属性时的访问器(getter,本质是个函数),该访问器的返回值为该属性的值。默认为undefined- set 用以指定访问该属性时的赋值器(setter,本质是个函数),该赋值器的接受一个参数。默认为undefined

我们可以使用Object.defineProperty来设置对象的属性描述符。例如:

通过上面这个例子可以看出,描述符具有继承的特点,我们这里显式的把描述符对象的__proto__设为null,就避免了从Object.prototype中继承相应属性。当然我们也可以显式地设置描述符的所有属性:

这样的效果和第一段代码的效果是一样的。

下面再举一个访问描述符的例子:

需要注意的是,不能混淆了访问描述器与数据描述器。下面这样写是错误的:

typeof

如果想在运行时获知某变量的类型,可以使用typeof操作符。typeof的返回值如下表:

其中有一处需要注意,那就是typeof null == "object",按照ECMAScript 5.1标准,Null类型应该是个基本类型,为什么这里返回object呢?原因是这样的:

在javascript 1.0中,javascript中的值是用一个类型标志(type tag)和一个实际值这样的结构表示的,对象的类型标志为0,null在C语言中表示NULL指针(0x),所以null的类型标志就为0了。

标签: 深入探讨近义词

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

上一篇:深入理解JavaScript系列(42):设计模式之原型模式详解(深入理解javascript特性.pdf)

下一篇:深入理解JavaScript系列(49):Function模式(上篇)(深入理解javascript特性)

  • 发票专票抵扣
  • 月末计提无形资产的折旧
  • 年终奖可以税前扣除嘛
  • 固定资产二级科目取消原因
  • 税费退库怎么做凭证
  • 怎么查企业适用哪个会计制度教学视频
  • 暂估资产会计处理
  • 库存现金盘盈盘亏的账务处理
  • 上交的项目评审费如何做财务处理呢?
  • 出口货物的进项发票什么时候认证
  • 计提房屋租赁费
  • 去年销售怎么算
  • 进料余料结转的征免方式
  • 劳务派遣可以开专票吗
  • 企业的商品产品包括
  • 发票查询结果显示不出来
  • 附加税的计税依据是销项减进项吗
  • 对方公司破产债务怎么办
  • 收到退回的银行汇票会计分录
  • 进项和销项单价的比例
  • 个体户没有对公账户可以转个人账户吗
  • 信息服务费发票范围
  • 在建工程二级科目待摊支出
  • 资产减值损失借方余额在利润表怎么填列
  • 持有至到期投资减值准备
  • 公司产品因质量问题买家追究
  • 怎么用苹果6splus
  • 预收款项的减少
  • 新版Win10中,如何仅修改部分文本大小
  • 个人销售自己使用过的物品免征增值税
  • 退货的会计分录怎么做
  • 编制竣工决算的主要依据
  • 进度条js代码
  • 金鱼草的养殖方法和注意事项有哪些
  • win10的环境配置在哪
  • PHP:realpath_cache_size()的用法_Filesystem函数
  • 交易性金融资产属于流动资产
  • 短期借款利息计算
  • 月初在产品成本+本月生产费用
  • 劳动仲裁的调解款要扣税吗
  • 企业收到土地回收怎么办
  • 帝国cms上传视频半天没反应
  • web前端开发规范有哪些
  • 营业外收入会计分录怎么做
  • 冲掉应收账款
  • 库存商品用于研发要进项税额转出吗
  • 企业给企业借款收入会计处理
  • 预收账款未发货会计分录
  • 工业企业发生的各项费用
  • 特惠贷贴息金额怎么算的
  • 盈余公积一定要计提吗
  • 银行汇票用什么会计分录
  • 怎样识别真假增值税发票
  • 无形资产比如
  • 农业种植补贴需要审批吗
  • 小规模纳税人税率1%政策到什么时候
  • 更衣柜属于什么费用
  • 超市现金券模板
  • 什么叫自主研发
  • 开票和不开票
  • 认证后的进项税额留抵退税
  • sqlserver数据库中的null值空值表示的是空格或零值
  • freebsd使用
  • win8系统怎么远程电脑
  • apache是什么文件
  • 苹果电脑安装虚拟机会有什么影响
  • ubuntu flash player
  • ghost备份1678
  • pqinit.exe - pqinit是什么进程 有什么用
  • linux的samba是什么
  • Linux安装完mysql后提示错误无法登陆mysql怎么办?
  • cocos怎么用
  • centos7如何分区
  • jquery1.11.3
  • 国税网上开票怎么不显示界面
  • 税务编号是什么 个人
  • 浙江省国家电子税务局官网登录
  • 简述进料加工对中国的意义
  • 如何做好税务局长
  • 下列哪些表述是正确的( )
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设