JavaScript之原型|typeof|instanceof

//var 变量X --> 对象 --> 构造器 --> 原型对象 
function Person(){};
var stu = new Person();
//var stu = new Person.constructor();//等效


//instanceof:用来确定一个实例是否是由特定函数构造器所创建的;还可以用于判断函数是否继承了其原型链中任何对象(必须要了解:原型链)
stu instanceof Person;//true
typeof stu; // "object"
stu.prototype; //undefined
stu.constructor; // f Person(){}

var 变量X --> 对象 --> 构造器 --> 原型对象

instanceof:

    1.用来确定一个实例是否是由特定函数构造器所创建的;

    2.还可以用于判断函数是否继承了其原型链中任何对象(必须要了解:原型链)

function Person(){this.name};
function Student(){this.school};
Student.prototype = new Person();//原型链,实现继承
/*
    注意:
           强烈不推荐: 父类原型直接赋值给子类原型,否则子类原型上的任何修改都将会影响到父类的原型,因为他们是同一个对象
           但也有的好处:所有原型中继承的函数都是实时更新的(live-update)
           Eg:Student.prototype = Person.prototype;

*/

var stu = new Student();
console.log("stu instanceof Student:",stu instanceof Student);//true
console.log("stu instanceof Person:",stu instanceof Person);//true  


//////////////////////|分隔符|/////////////////////
function a(){}
(new a()) instanceof Function //false

function a(){}
(new a()) instanceof a // true

function a(){}
(new a()) instanceof Object // true

 

hasOwnProperty(item):

  objectInstance.hasOwnProperty(item))//用于判断一个属性是否是对象实例定义的,还是从原型导入的 

//扩展:对JavaScript原生对象的扩展
//原理:原型对象
Object.prototype.keys = function(){
	var keys = [];
	for(var item in this)
		if(this.hasOwnProperty(item))//用于判断一个属性是否是对象实例定义的,还是从原型导入的
		    keys.push(item);
	return keys;
}

var obj = {"name":"johnny","age":21};
obj.keys();//["name"."age"]

ECMAScript中的(六大)基本数据类型

1.简单数据类型

  Undefined、Null、Boolean、Number、String

2.复杂数据类型

  Object

备注:

  ECMAScript不支持任何创建自定义的机制,而所有值都最终都将是上述6种数据类型之一。

  但由于ECMAScript数据类型具有动态性,因此便没有再定义其他数据类型的必要了。

//变量的动态性:这意味着相同的变量可用作不同的类型:
var x                // x 为 undefined
var x = 6;           // x 为数字
var x = "Bill";      // x 为字符串

 typeof(A):检测给定变量的数据类型----typeof

函数对象:typeof(function a(){}) //"function"
  说明:
    1.在safari、chrome中,返回“function”,其他浏览器中返回“object”。
    2.从技术角度讲,函数在ECMAScript中是对象,不是一种数据类型。
    3.然而,函数也确实有一些特殊的属性。因此通过typeof操作符区分函数和其他对象也是必要的。  

对象:typeof({}) //"object"
        typeof(null) //"object"
数组对象:typeof([]) //"object"

undefined:typeof(undefined) //"undefined"(便是变量未定义,也可对某变量赋undefined为具体值)
  说明:
    1.undefined派生自null
    2.关于四大值属性(Infinity、NaN、undefined、null字面量),详见MDN:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects

字符串:typeof("") //"string"
数值:typeof(34) // "number"
        typeof(NaN) // "number"
布尔:typeof(true) //"boolean"

参考文献

原文地址:https://www.cnblogs.com/johnnyzen/p/7892702.html