资讯专栏INFORMATION COLUMN

01.javascript之数据类型

Aceyclee / 1984人阅读

摘要:新增了第七种类型的值数值字符串布尔值对象数据类型判断有三种方法,可以判断一个值的类型运算符运算符方法运算符运算符可以返回一个值的数据类型。运算符运算符返回一个布尔值,表示对象是否为某个构造函数的实例。

1.数据类型

JavaScript一共有六种数据类型。(ES6新增了第七种Symbol类型的值)

数值(Number)

字符串(String)

布尔值(boolean)

undefined

null

对象(object)

2.数据类型判断

JavaScript有三种方法,可以判断一个值的类型

typeof运算符

instanceof运算符

Object.prototype.toString()方法

typeof运算符

typeof运算符可以返回一个值的数据类型。
数值、字符串、布尔值分别返回numberstringboolean

typeof 123  //"number"
typeof "hello"  //"string"
typeof true  //"boolean"

函数返回function

function f(){} 
typeof f  //"function"

undefined返回undefined

typeof undefined  // "undefined"

对象返回object

typeof {} // "object"
typeof [] // "object"

null返回object`。

typeof null // "object"
instanceof运算符

instanceof运算符返回一个布尔值,表示对象是否为某个构造函数的实例。
由于instanceof检查整个原型链,因此同一个实例对象,可能会对多个构造函数都返回true
instanceof运算符的一个用处,是判断值的类型。

var x = []
var f={}
x instanceof Array //true
f instanceof Object //true

instanceof运算符只能用于对象,不适用原始类型的值。

利用instanceof运算符,还可以解决,调用构造函数时,忘了加new命令的问题。

function Fn (f1, f2) {
  if (this instanceof Fn) {
    this._foo = f1;
    this._bar = b2;
  } else {
    return new Fn(f1, f2);
  }
}
Object.prototype.toString()

toString方法的作用是返回一个对象的字符串形式,默认情况下返回类型字符串。

var o1 = new Object();
o1.toString() //"[object Object]"

toString() 的应用:判断数据类型
Object.prototype.toString方法返回对象的类型字符串,因此可以用来判断一个值的类型。

var obj = {};
obj.toString() // "[object Object]"

上面代码调用空对象的toString方法,结果返回一个字符串object Object,其中第二个Object表示该值的构造函数。这是一个十分有用的判断数据类型的方法。

由于实例对象可能会自定义toString方法,覆盖掉Object.prototype.toString方法,所以为了得到类型字符串,最好直接使用Object.prototype.toString方法。通过函数的call方法,可以在任意值上调用这个方法,判断这个值的类型。

Object.prototype.toString.call(value)

上面代码表示对value这个值调用Object.prototype.toString方法。
不同数据类型的Object.prototype.toString方法返回值如下。

数值:返回[object Number]

Object.prototype.toString.call(12) //"[object Number]"

字符串:返回[object String]

Object.prototype.toString.call("ab")  //"[object String]"

布尔值:返回[object Boolean]

Object.prototype.toString.call(true)  //"[object Boolean]"

undefined:返回[object Undefined]

Object.prototype.toString.call(undefined)  //"[object Undefined]"

null:返回[object Null]

Object.prototype.toString.call(null)  //"[object Null]"

数组:返回[object Array]

Object.prototype.toString.call([])  //"[object Array]"

函数:返回[object Function]

var f = function (){}
Object.prototype.toString.call(f)  //"[object Function]"

利用这个特性,可以写出一个比typeof运算符更准确的类型判断函数。

var type = function (o){
  var s = Object.prototype.toString.call(o);
  return s.match(/[object (.*?)]/)[1].toLowerCase();
};

type({}); // "object"
type([]); // "array"
type(3); // "number"
type(null); // "null"
type(); // "undefined"
type(/abcd/); // "regex"
type(new Date()); // "date"

未完待续

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/96062.html

相关文章

  • 做一名精致的JavaScripter 01JavaScript简介

    摘要:精致从细节做起。标准会在每年的月发布一次,作为当年的正式版本,便是年发布的正式版本。支持情况各大浏览器对的支持情况浏览器支持情况对的支持情况支持情况。在浏览器中基于实现的已经成为的重要组成部分。 精致从细节做起。前端的工作也有一段时间了,大大小小的前端框架都有接触过,越是深入学习越是感觉之前的学习过于粗糙,基础不够扎实,于是准备近期把JavaScript的基础知识点梳理一下,查缺补漏,...

    张巨伟 评论0 收藏0
  • day1 - JavaScript Drum Kit 中文指南

    摘要:中文指南作者简介是推出的一个天挑战。页面基础布局标签定义键盘文本说到技术概念上的特殊样式时,就要提到标签。主要代码主要属性有以下几个中有一个样式为,在本案例中,就是,是以中的为参照物,就是。 Day01 - JavaScript Drum Kit 中文指南 作者:©liyuechun 简介:JavaScript30 是 Wes Bos 推出的一个 30 天挑战。项目免费提供了 30 ...

    HackerShell 评论0 收藏0
  • JavaScript Quiz系列题集

    摘要:系列题集系列题集系列题集系列题集系列题集系列题集系列题集随手记几个题目先,权当草稿,如果有朋友帮忙分析下原因,不胜感激,哈哈以前的文章地址是这样的格式,现在变了 从毕业开始切图接触前端,慢慢转向javascript开发...但是,感觉自己的javascript难当大任,基础薄弱。网上面试题集很多,设计HTML/CSS/JS,但其中的问题,如果不是自己亲历,没有被难住,是不会有太深印象的...

    xinhaip 评论0 收藏0
  • JavaScript 30 - 一起做一次了不起的挑战

    摘要:加入我们,一起挑战吧扫码申请加入全栈部落 JavaScript 30 - 一起做一次了不起的挑战 (Node+Vue+微信公众号开发)企业级产品全栈开发速成周末班首期班(10.28号正式开班,欢迎抢座) 在Github上看到了wesbos的一个Javascript30天挑战的repo,旨在使用纯JS来进行练习,不允许使用任何其他的库和框架,该挑战共30天,我会在这里复现这30天遇到的挑...

    1treeS 评论0 收藏0
  • JavaScript 闯关记

    摘要:对象数组初始化表达式,闯关记之上文档对象模型是针对和文档的一个。闯关记之数组数组是值的有序集合。数组是动态的,根闯关记之语法的语法大量借鉴了及其他类语言如和的语法。 《JavaScript 闯关记》之 DOM(下) Element 类型 除了 Document 类型之外,Element 类型就要算是 Web 编程中最常用的类型了。Element 类型用于表现 XML 或 HTML 元素...

    mj 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<