本文实例总结了javascript 易错知识点。分享给大家供大家参考,具体如下:为什么 typeof null === 'object'原理是这样的,不同的对象在底层都表示为二进制,在JavaScript中二进制前三位都为0的话会被判断为 object 类型, null 的二进制表示是全0,自然前三位也是0,所以执行 typeof 时会返回“ object ”。对象属性的存在性如 myObject.a 的属性访问返回值可能是 undefined ,但是这个值有可能是属性中存储的 undefined ,也可能是因为属性不存在所以返回 undefined 。那么如何区分这两种情况呢?
var myObject = {

a:2
};

// 方案一
("a" in myObject); // true
("b" in myObject); // false

// 方案二
myObject.hasOwnProperty( "a" ); // true
myObject.hasOwnProperty( "b" ); // false

// 方案三
Object.prototype.hasOwnProperty.call(myObject, 'b')


var myObject = {

a:2
};

// 方案一
("a" in myObject); // true
("b" in myObject); // false

// 方案二
myObject.hasOwnProperty( "a" ); // true
myObject.hasOwnProperty( "b" ); // false

// 方案三
Object.prototype.hasOwnProperty.call(myObject, 'b')

对象继承的三种方法参考如下代码:


function Foo(name) {



this.name = name;


}



Foo.prototype.myName = function() {



console.log(this.name)


}



function Bar(name, label) {



Foo.call(this, name);



this.label = label;


}



// 方法1


Bar.prototype = Object.create(Foo.prototype)



// 方法2


Bar.prototype = Foo.prototype;


// 方法3

Bar.prototype = new Foo();



//Bar.prototype.constructor = Bar;



Bar.prototype.sayName = function() {



console.log(this.name)


}






var b = new Foo('fayin')




b.sayName()




function Foo(name) {



this.name = name;


}



Foo.prototype.myName = function() {



console.log(this.name)


}



function Bar(name, label) {



Foo.call(this, name);



this.label = label;


}



// 方法1


Bar.prototype = Object.create(Foo.prototype)



// 方法2


Bar.prototype = Foo.prototype;


// 方法3

Bar.prototype = new Foo();



//Bar.prototype.constructor = Bar;



Bar.prototype.sayName = function() {



console.log(this.name)


}






var b = new Foo('fayin')




b.sayName()

上例中,三种方法都可以使 Bar 继承 Foo.prototype 上的方法,但它们之间又有微妙的差别:Object.create(..) 会凭空创建一个“新”对象并把新对象内部的 [[Prototype]] 关联到你指定的对象(本例中是 Foo.prototype )。Object.create(..)Bar.prototype = Foo.prototype 并不会创建一个关联到 Bar.prototype 的新对象,它只是让 Bar.prototype 直接引用 Foo.prototype 对象。因此当你执行类似 Bar.prototype.myLabel = ... 的赋值语句时会直接修改 Foo.prototype 对象本身。Bar.prototype = Foo.prototypeBar.prototype = new Foo() 的确会创建一个关联到 Bar.prototype 的新对象。但是它使用了 Foo(..)的“构造函数调用”,如果函数 Foo 有一些副作用(比如写日志、修改状态、注册到其他对象、给 this 添加数据属性,等等)的话,就会影响到 Bar() 的“后代”,后果不堪设想。Bar.prototype = new Foo()结论结论因此,要创建一个合适的关联对象,我们必须使用 Object.create(..) 而不是使用具有副作用的 Foo(..) 。这样做唯一的缺点就是需要创建一个新对象然后把旧对象抛弃掉,不能直接修改已有的默认对象。感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools./code/HtmlJsRun测试上述代码运行效果。在线HTML/CSS/JavaScript代码运行工具在线HTML/CSS/JavaScript代码运行工具http://tools./code/HtmlJsRun关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript错误与调试技巧总结》、《JavaScript传值操作技巧总结》、《javascript编码操作技巧总结》、《JavaScript中json操作技巧总结》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript动画特效与技巧汇总》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》JavaScript错误与调试技巧总结JavaScript传值操作技巧总结javascript编码操作技巧总结JavaScript中json操作技巧总结JavaScript切换特效与技巧总结JavaScript查找算法技巧总结JavaScript动画特效与技巧汇总JavaScript数据结构与算法技巧总结JavaScript遍历算法与技巧总结JavaScript数学运算用法总结希望本文所述对大家JavaScript程序设计有所帮助。