【百度分享】javascript中的数据类型-阿里云开发者社区

开发者社区> 技术小美> 正文

【百度分享】javascript中的数据类型

简介:
+关注继续查看

最近对javascript型有些感想,想分3个部分和大家分享一下,先说说数据类型的分析:


1. 数据类型 
javascript中包含6种数据类型:undefined、null、string、number、boolean和object。其中,前5种是原始数据类型,object是对象类型。 
object类型中包括Object、Function、String、Number、Boolean、Array、Regexp、Date、Globel、Math、Error,以及宿主环境提供的object类型。


2. 类型判断 
通常在javascript中进行类型判断主要通过3种方式:typeof、instanceof、constructor。 
2.1 typeof 
typeof操作可能返回的类型为undefined、object、number、string、function、boolean。但是会有一些情况并不能完全判断准确。比如typeof new String('')的值为object。 
2.2 constructor 
有时候我们可能会很偷懒的使用a.constructor == String进行类型判断,但是constructor其实是不靠谱的东西。因为当我们调用a.constructor的时候,内部操作其实是ToObject(a).prototype.constructor(ToObject是什么,看下文分解)。 
看下面一段代码就能明白: 
String.prototype.constructor = Number; 
alert('test'.constructor == String); //Result:false 
或者 
function MyClass() { 

MyClass.prototype = {}; 
alert((new MyClass).constructor == MyClass); //Result:false 
而且,通过constructor并不能判断出对象实例类型的继承关系。因为javascript的继承其实是通过原型链实现的(原型链是什么,看下文分解)。 
另外,null.constructor会抛出运行时的TypeError,所以使用constructor除了不靠谱外,还可能伴随着异常的风险。 
2.3 instanceof 
例子:a instanceof String 
关于object类型的判断,使用instanceof判断是比较靠谱的方法。instanceof所做的事情是,先取出类型对象(String)的prototype成员(String.prototype),然后和要判断类型的对象(a)的原型链中的对象逐个比较。当发现是一个对象的时候返回true,原型链中当前节点是null的时候返回false。 
类型判断示例:判断一个变量是否是字符串类型 
function isString(str) { 
return (typeof str == 'string' || str instanceof String); 
}


3. 类型转换 
ecma262中描述了以下几种类型转换的操作:(还有其他的比如ToInt32等,这里就不列了) 
• ToNumber:转换成number型 
• ToString:转换成string型 
• ToBoolean:转换成boolean型 
• ToObject:转换成object型 
• ToPrimitive:转换成原始类型 
每种操作都描述了从什么类型转换成该类型的映射。比如上文的'a'.constructor中,就包含解析器使用ToObject将‘a’转换成object的一个隐式操作。 
这里想要主要说的是ToPrimitive。ToPrimitive用于转换成原始数据类型。当要转换的量已经是原始类型时,会直接返回。如果要转换的是一个Object,那会调用`DefaultValue`方法做转换。(`DefaultValue`是什么,下文分解)该方法可以传入一个hint参数,说明需要将Object转换成字符串或数字。如果要转换成字符串,则调用Object的toString方法,如果要转换成数字,则调用Object的valueOf方法。具体在运行时什么时候应该转换成什么类型,请参考ecma262中关于expression的描述部分。 
 

 








本文转自百度技术51CTO博客,原文链接:http://blog.51cto.com/baidutech/746552,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Python爬虫入门教程 31-100 36氪(36kr)数据抓取 scrapy
1. 36氪(36kr)数据----写在前面 今天抓取一个新闻媒体,36kr的文章内容,也是为后面的数据分析做相应的准备的,预计在12月底,爬虫大概写到50篇案例的时刻,将会迎来一个新的内容,系统的数据分析博文,记得关注哦~ 36kr 让一部分人先看到未来,而你今天要做的事情确实要抓取它的过去。
9321 0
Scrapy框架-通过scrapy_splash解析动态渲染的数据
前言 对于那些通过JS来渲染数据的网站,我们要解析出它的html来才能取到想要的数据,通常有两种解决办法: 1、通过selenim调用浏览器(如chrome firefox等)来爬取,将解析的任务交给浏览器。
2057 0
使用javascript获取wx.config内部字段解决微信分享
背景 在微信分享开发的时候我们通常的流程是 微信分享 wx.config({ appId: '', timestamp...
957 0
js之原生JavaScript数据结构
js之原生JavaScript数据结构
4843 0
Kubernetes+Promethues+Cloud Alert实践分享
前言容器集群管理系统 Kubernetes(简称K8s),为容器化的应用提供部署运行、容器编排、负载均衡、服务发现和动态伸缩等一系列完整功能,Prometheus 对 K8s 支持非常棒,能够自动发现 K8s 的监控目标!Prometheus 产生的告警,可以通过 Alertmanager 转发到 Cloud Alert,实现告警的降噪、分派和通知。
1531 0
Python爬虫入门教程 37-100 云沃客项目外包网数据爬虫 scrapy
爬前叨叨 2019年开始了,今年计划写一整年的博客呢~,第一篇博客写一下 一个外包网站的爬虫,万一你从这个外包网站弄点外快呢,呵呵哒 数据分析 官方网址为 https://www.clouderwork.
757 0
好程序员web前端分享javascript枚举算法
好程序员web前端分享javascript枚举算法,题目:在1,2,3,4,5 五个数中,我们随机选取 3个数。问有多少种取法?并且把每种取出数的方法列举出来。 乍看这道题,其实感觉没什么难度。三个for循环不就解决问题了。
955 0
+关注
6906
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载