首页 > 代码库 > javascript一些底层方法总结及用法

javascript一些底层方法总结及用法

本地对象:ECMA-262 把本地对象(native object)定义为“独立于宿主环境的 ECMAScript 实现提供的对象”。          简单来说,本地对象就是 ECMA-262 定义的类(引用类型)内置对象:ECMA-262 把内置对象(built-in object)定义为“由 ECMAScript 实现提供的、独立于宿主环境的所有对象,          在 ECMAScript 程序开始执行时出现”。这意味着开发者不必明确实例化内置对象,它已被实例化了。ECMA-262 只定义了两个内置对象,          即 Global 和 Math (它们也是本地对象,根据定义,每个内置对象都是本地对象)。宿主对象:所有非本地对象都是宿主对象(host object),即由 ECMAScript 实现的宿主环境提供的对象。          所有 BOM 和 DOM 对象都是宿主对象。enumerables = [‘hasOwnProperty‘, ‘valueOf‘, ‘isPrototypeOf‘, ‘propertyIsEnumerable‘, ‘toLocaleString‘, ‘toString‘, ‘constructor‘];// hasOwnProperty:是用来判断一个对象是否有你给出名称的属性或对象。不过需要注意的是,此方法无法检查该对象的原型链中是否具有该属性,该属性必须是对象本身的一个成员。// Ie8以下不支持dom. hasOwnProperty 方法。// isPrototypeOf是用来判断要检查其原型链的对象是否存在于指定对象实例中,是则返回true,否则返回false。1、hasOwnProperty作用:是用来判断一个对象是否有你给出名称的属性或对象。调用方式:object.hasOwnProperty(proName)参数:object(必须) 对象的实例;proName(必须) 一个属性名称的字符串值注意:如果 object 具有带指定名称的属性,则 hasOwnProperty 方法返回 true,否则返回 false。      此方法不会检查对象原型链中的属性。      该属性必须是对象本身的一个成员。      Internet Explorer 8 和低于其的版本的宿主对象不支持该属性。代码举例:      在下面的示例中,所有 String 对象共享一个公共 split 方法。 下面的代码将显示 false 和 true。 var s = new String("Sample"); console.log(s.hasOwnProperty("split")); console.log(String.prototype.hasOwnProperty("split"));2、in 运算符作用:测试一个对象中是否存在一种属性。调用方式:result = property in object参数:result(必须) 任何变量;proName(必须) 计算结果为字符串表达式的表达式;object(必须) 任意对象注意:in 运算符确定对象中是否有名为 property 的属性。 它还确定属性是否为对象的原型链的一部分。代码举例:   code1:      var myObject = new Object();          myObject.name = "James";          myObject.age = "22";          myObject.phone = "555 0234";      if ("phone" in myObject) {         console.log("property is present");      } else  {         console.log("property is not present");      }  code2:     console.log("toString" in "zheyang");     console.log("toString" in new String("zheyang")) 思考: var aa = "zheyang" 与 aa = new String("zheyang") 的区别 3、valueOf    作用:返回指定对象的原始值。调用方式:object.valueOf();注意:在JS里数字其实都是浮点数。代码举例:   var aa = 123    console.log(aa.valueOf())   console.log(123.valueOf())   console.log(123..valueOf())   console.log((123).valueOf())4、typeof作用:返回指定对象的类型。调用方式:typeof object;代码举例:   var aa = 12;   var bb = new Number(12)   console.log(typeof aa)   console.log(typeof bb)5、instanceof作用:返回一个布尔值,该值指示一个对象是否为特定类或构造函数的一个实例。调用方式:object instanceof class;参数:object(必须) 一个对象;class(必须) 任何对象类或构造函数;注意:如果 object 是 class 或构造函数的实例,则 instanceof 运算符返回 true。      如果 object 不是指定类或函数的实例,或者 object 为 null,则返回 false。      JavaScript Object 很特殊,当且仅当对象用 Object 构造函数构造时,对象才被视为 Object 的实例。代码举例:    function ClassA() {    }    function ClassB() {        }    ClassB.prototype = {        constructor: ClassA    }    function ClassC(){       ClassA.call(this);    }    function ClassD(){}    var obj = new ClassA    var obj2 = new ClassB;    var obj3 = new ClassC;    ClassD.prototype = obj2;    var obj4 = new ClassD;    console.log(obj instanceof ClassA)    console.log(obj2 instanceof ClassB)    console.log(obj2 instanceof ClassB)    console.log(obj3 instanceof ClassA)    console.log(obj4 instanceof ClassA)    console.log(ClassA instanceof Function)6、isPrototypeOf作用:确定一个对象是否存在于另一个对象的原型链中。调用方式:prototype.isPrototypeOf(object)参数:prototype(必须) 对象原型;object(必须) 另一个对象,将对其原型链进行检查注意:如果 object 的原型链中具有 prototype,则 isPrototypeOf 方法返回 true。      原型链用于在同一个对象类型的不同实例之间共享功能。      当 object 不是对象或当 prototype 没有出现在 object 的原型链中时,isPrototypeOf 方法返回 false。代码举例:    function Rectangle() {}    var rec = new Rectangle();    cosole.log(Rectangle.prototype.isPrototypeOf(rec));7、propertyIsEnumerable作用:返回布尔值,该值指示指定属性是否为对象的一部分以及该属性是否是可枚举的。调用方式:object.propertyIsEnumerable(propName)参数:object(必须) 对象实例;propName(必须) 一个属性名称的字符串值;注意:如果 propName 存在于 object 中且可以使用一个 For...In 循环枚举出来,则 propertyIsEnumerable 属性将返回 true。      如果 object 不具有所指定名称的属性或者所指定的属性不是可枚举的,则 propertyIsEnumerable 属性将返回 false。      通常,预定义的属性不是可枚举的,而用户定义的属性总是可枚举的。      propertyIsEnumerable 属性不考虑原型链中的对象。代码举例:    var a = new Array("apple", "banana", "cactus");    var s = a.propertyIsEnumerable(1);    console.log (s);8、toString / toLocaleString作用:可把一个对象转换为字符串,并返回结果。调用方式:object.toString(num)参数:object(必须) 对象;num(非必须) ;注意:如果对象是数子,则参数可为要转换的进制数,默认为10      如果是布尔类型,则会转换为对应的字符串代码举例:       var aa = 123   console.log(aa.toString(2))   var bb = new Boolean(true)   console.log(bb)9、constructor 代码举例: constructor.parent 10、 Function 与 ObjectFunction:首先回顾一下函数对象的概念,函数就是对象,代表函数的对象就是函数对象。所有的函数对象是被Function这个函数对象构造出来的。也就是说,Function是最顶层的构造器。它构造了系统中所有的对象,包括用户自定义对象,系统内置对象,甚至包括它自已。这也表明Function具有自举性(自已构造自己的能力)。这也间接决定了Function的[[call]]和[[constructor]]逻辑相同。Object: 对于Object它是最顶层的对象,所有的对象都将继承Object的原型,但是你也要明确的知道Object也是一个函数对象,所以说Object是被Function构造出来的。代码举例:alert(Function instanceof Function);//true alert(Function instanceof Object);//true    alert(Object instanceof Function);//true function Foo() {};var foo = new Foo();alert(foo instanceof Foo); // truealert(foo instanceof Function); // falsealert(foo instanceof Object); // truealert(Foo instanceof Function); // truealert(Foo instanceof Object); // true

 

javascript一些底层方法总结及用法