关于JavaScript中的类型判断,我想大部分JavaScripter 都很清楚 typeof 和  instanceof,却很少有人知道 constructor,以及constructor与前面二者的关系

typeof

console.log(typeof 1); //number

console.log(typeof "宋远溪"); //string

console.log(typeof true); //boolean

console.log(typeof {}); //object

console.log(typeof []); //object

console.log(typeof Symbol(1)); //symbol

console.log(typeof null);//object

console.log(typeof undefined); //undefined

console.log(typeof BigInt(1)); //bigint, ES10推出的BigInt是一个内置对象,它提供了表示大于最大安全整数之外的方法, bigint 通常用于计算最大安全整数之外的数值

如你所见,typeof只能进行最基本的类型判断;那我们如果想知道一个变量是对象或者是数组怎么办?接下来

instanceof

console.log ({} instanceof Object); //true

console.log ([] instanceof Array); //true

functionSomething () {}var sth = newSomething();

console.log(sthinstanceof Something); //true

可以看到 instanceof 能区分出数据的类型,以及该数据是由谁创建的,但是,instanceof 就真的万无一失吗?继续往下

functionSomething () {}functionAnything() {}

Something.prototype= newAnything();var sth = newSomething();

console.log(sthinstanceof Something);//true

console.log(sth instanceof Anything);//true

为什么会这样?

因为instanceof 会检查 Anything 是否 存在与 sth 的原型链上,如果存在,则返回True,这么说的话,下面的也是成立的

console.log(sth instanceof Object); //true

constructor

functionSomething() {}functionAnything() {}var template = newAnything();

template.constructor=Something;

Object.defineProperty(template,'constructor',{

enumerable:false,

writable:false,

});

Something.prototype=template;

const sth= newSomething();

console.log(sth.constructor=== Something);//true

console.log(sth.constructor === Anything);//false

console.log(Object.keys(sth)); //[],因为constructor属于内置属性,所以我们配置不可枚举,不可重写;

sth.constructor 其实就是 sth.__proto__.constructor,因为constructor属性存在于原型链上,所以我们可以直接简写;这样就能实现精确1对1比对了

java中typeof_深入剖析JavaScript中的数据类型判断(typeof instanceof prototype.constructor)...相关推荐

  1. 【深入剖析JavaScript中的对象】

    深入剖析JavaScript中的对象

  2. javascript java 传参_[Java教程]【JS】JavaScript中的参数传递

    [Java教程][JS]JavaScript中的参数传递 0 2017-02-18 00:00:24 ECMAScript中所有函数的参数都是按值传递的,简单讲就是函数外部的值 复制给函数内部的参数, ...

  3. crytojs加密 java解密,使用CryptoJS在Javascript中加密并在Java中解密

    我试图使用谷歌的 https://code.google.com/p/crypto-js/#AES加密JavaScript,就像它的例子一样.问题是,我试图用Java解密它的结果是不同的.我可以看到的 ...

  4. 剖析javascript中构造函数

    在绝大多数的编程语言中,均存在函数这一概念,其含义大概可以归纳为:包含一定语句,用于完成某些有意义的工作,如处理文本.控制输入输出或计算数值等.通过在程序代码中引入函数名称和所需的参数,可在该程序中执 ...

  5. 在javascript中使用java_在JavaScript中使用Java

    12.3 在JavaScript中使用Java 利用JavaScript可以把Java语言的小应用程序(applet),插件以及包括表单.超 级链接和图象在内的各种Web元素有机地联系起来. Java ...

  6. javascript中对象_了解JavaScript中的承诺

    javascript中对象 我向您承诺,到本文结束时,您将更好地了解JavaScript. 我与JavaScript有一种"爱与恨"的关系. 但是尽管如此,JavaScript一直 ...

  7. html语言中 加当前时间,javascript中怎么获取当前时间?

    在web开发中,通过js获取时间非常的常用.下面本篇文章就来给大家介绍一下使用javascript获取当前时间的方法,希望对大家有所帮助. 在javascript中可以使用Date对象中的Date() ...

  8. html中的js作用,javascript中的innerHTML属性有什么作用

    innerHTML在javaScript中具有双向功能,一是可以从指定的元素对象中获取内容,二是可以把自定义内容插入到指定的元素对象中去. 定义和用法 innerHTML属性用于设置或返回指定标签之间 ...

  9. javascript 无法修改 数组中对象_谈谈JavaScript中对象建立(Object)

    在这篇文章中我将会着重说明如何创建JavaScript里的对象(Object). 对象(Object)是什么? 在开始介绍如何创建对象前,我们要知道对象是什么.对象(Object)简单地来说,就是一堆 ...

最新文章

  1. 第三代测序单分子荧光测序之Pacbio 测序原理
  2. 二叉树的层次遍历 II[LeetCode-107]
  3. python requests库用法_python之requests库的使用
  4. 空的宏定义作用及常见用法
  5. ElementUI介绍以及安装
  6. mysql学习笔记14 多表查询初步
  7. JeecgBoot 2.4 微服务正式版发布,基于SpringBoot的低代码平台
  8. tc.html是什么页面,HTML iframe属性详细说明
  9. c++求两点的距离利用友元_用c++定义两个坐标点,计算两点间距离;进而计算线段的面积...
  10. 网站数据分析指标体系
  11. 随机抽奖程序_Excel VBA(7) – 自制九宫格抽奖器
  12. 炭足迹计算机的火车好处,碳足迹与碳足迹计算器.pdf
  13. LAMMPS生成粗糙表面的in文件脚本(可调节微结构高、长和宽)
  14. 怎样找计算机物理地址,怎么查询电脑物理地址
  15. pad看linux源码,在 iPad和 iPhone的浏览器上查看网页源代码
  16. 使用机器学习数据集构建销售预测Web应用程序
  17. ActiveMQ详细的介绍
  18. 使用shell让其在系统空闲一段时间后自动结束指定进程
  19. Python3:鸭子类型和多态
  20. 数二第一章函数、极限、连续做题总结

热门文章

  1. JAVA重要基础之反射
  2. Spring----Bean装配
  3. 设计模式-------建造者模式(生成器模式)
  4. POJ3581 后缀数组
  5. Linux Error: Rm: Cannot Remove DIRECTORY Is A Directory
  6. Redhat Linux Enterprise Server 5.5 x86_64位操作系统Karachi时区问题?
  7. Android技巧:003使用Intent连接多个活动
  8. Linux文本处理(grep,sed)
  9. Oracle 将一个查询结果值动态赋值给一个变量
  10. SQL Server中授予用户查看对象定义的权限