Javascript 中 instanceof 使用遇到的问题与探讨

先上代码:
    var a = 10;
    alert(a instanceof Number);//false 这里为什么是false?
    alert(a instanceof String);//false
    alert(a instanceof Object);//false 这里为什么是false?   
    alert(typeof a == ‘number‘);//true
   
    var a = [‘1‘,‘a‘];
    alert(a instanceof Array);//true
    alert(a instanceof Object);//true
    alert(typeof a == ‘object‘);//true
   
    var a = ‘a‘;
    alert(a instanceof String);//false 这里为什么是false?    
    alert(a instanceof Object);//false 这里为什么是false?   
    alert(typeof a == ‘string‘);//true

我想不通的是: 为什么是false?我有百度过答案,得到的答案是
instanceof 用于判断是否是某个对象的实例;typeof 用于判断数据类型。但这个答案不足以说明问题,故上来请教,请教教我,谢谢!

==========================华丽分割线==========================================

自问自答下:
一个具体的数字,10,它可以认为是number类型,也可以认为是对象类型中Number的一个实例,但是这样就犯了种类划分冲突的问题了,它即是
number类型,又是Object类型(其子类Number类型),因此,instanceof要排除已经定义的数据类型中规定的类型,也就是只适用于
自定义类型。
另外,对于数组只有类Array的概念,没有数组数据类型,typeof只能返回object数据类型,因此,对于数组是可以用instanceof的。

综上:没有必要过于纠结javascript的语法,因为它本身是一种弱的类型变量语言,确实不够严谨。

时间: 2024-12-24 00:37:35

Javascript 中 instanceof 使用遇到的问题与探讨的相关文章

JavaScript中instanceof运算符的用法以及和typeof的区别

instanceof : 为判断一个对象是否为某一数据类型,或一个变量是否为一个对象的实例;返回boolean类型栗子①: <script type="text/javascript"> var aColors = ["red", "green", "blue"]; alert(typeof aColors[0]); //output "string" alert(aColors[0] inst

javascript 中instanceof的用法

检测某个对象是不是另一个对象的实例 function Laker(){} function Bull(){} var la = new Laker() ; alert(la instanceof Laker) ; 返回结果:true function Laker(){} Laker.prototype = {} ; function Bull(){} var la = new Laker() ; Bull.prototype = Laker.prototype ; alert(la instan

JavaScript中“typeof”运算符与“instanceof”运算符的差异

在JavaScript中,运算符“typeof”和“instanceof”都可以用来判断数据的类型,那么这两个运算符有什么不同之处呢? 差异一:使用方式不同. 最明显的差异就是这两个运算符的使用方式了.“typeof”是一元运算符,其后直接跟需要进行类型判断的数据:而“instanceof”是二元运算符,其左侧是需要判断的数据,右侧是用于比较的类型. //typeof是一元运算符: var amount = 108; console.log(typeof amout);//控制台输出“numbe

javascript中原型链与instanceof 原理

instanceof:用来判断实例是否是属于某个对象,这个判断依据是什么呢? 首先,了解一下javascript中的原型继承的基础知识: javascript中的对象都有一个__proto__属性,这个是对象的隐式原型,指向该对象的原型对象.显式的原型对象使用prototype,但是Object.prototype.__proto__=null; 判断某个对象a是否属于某个类A的实例,可以通过搜索原型链. //继承机制 function A(){ } A.prototype.name='licu

javascript中typeof与instanceof的区别

JavaScript 中 typeof 和 instanceof 常用来判断一个变量是否为空,或者是什么类型的.但它们之间还是有区别的: typeof typeof 是一个一元运算,放在一个运算数之前,运算数可以是任意类型. 它返回值是一个字符串,该字符串说明运算数的类型.typeof 一般只能返回如下几个结果: number,boolean,string,function,object,undefined.我们可以使用 typeof 来获取一个变量是否存在,如 if(typeof a!="un

javascript 中 typeof 和 instanceof 的区别

在 javascript 中经常会用到 typeof 和 instanceof 来判断一个对象的类型,可能 typeof 用得多些,那来看看这两个之间的区别吧. typeof : typeof 是一个一元运算符,放在一个运算数之前,运算数可以是任意类型.它返回值是一个字符串,该字符串说明运算数的类型. typeof 一般只能返回如下几个结果:number,boolean,string,function,object,undefined. ? 1 2 3 4 5 6 7 8 <script typ

JavaScript中typeof、toString、instanceof与constructor

JavaScript 是一种弱类型或者说动态语言.这意味着你不用提前声明变量的类型,在程序运行过程中,类型会被自动确定. 这也意味着你可以使用同一个变量保存不同类型的数据. 最新的 ECMAScript 标准定义了 7 种数据类型: 6种原始类型:Boolean.Null.Undefined.Number.String.Symbol (ECMAScript 6 新定义)和Object,除 Object 以外的所有类型都是不可变的(值本身无法被改变). 一.typeof typeof操作符返回一个

关于JavaScript中的typeof与instanceof

JavaScript中typeof和instanceof可以用来判断一个数据的类型,什么时候选择使用typeof?什么时候选择使用instanceof? typeof运算符 typeof运算符返回值有以下几种 原始数据类型 typeof 123 // "number" typeof '123' // "string" typeof false // "boolean" 函数类型 function f() {} typeof f // "

JavaScript中的构造函数

function Accom(){};    //创建一个构造函数 //创建两个对象 var house=new Accom(); var apartment=new Accom(); 通过构造函数创建的对象有一个属性constructor,这个属性指向创建该对象时所用的Javascript构造函数. house.constructor===Accom;  或者   house instanceof Accom;     //true JavaScript中的每个构造函数都有一个prototyp