javascript 易错知识点实例小结


Posted in Javascript onApril 25, 2020

本文实例总结了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')

对象继承的三种方法

参考如下代码:

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 )。

Bar.prototype = Foo.prototype 并不会创建一个关联到 Bar.prototype 的新对象,它只是让 Bar.prototype 直接引用 Foo.prototype 对象。因此当你执行类似 Bar.prototype.myLabel = ... 的赋值语句时会直接修改 Foo.prototype 对象本身。

Bar.prototype = new Foo() 的确会创建一个关联到 Bar.prototype 的新对象。但是它使用了 Foo(..)的“构造函数调用”,如果函数 Foo 有一些副作用(比如写日志、修改状态、注册到其他对象、给 this 添加数据属性,等等)的话,就会影响到 Bar() 的“后代”,后果不堪设想。

结论

因此,要创建一个合适的关联对象,我们必须使用 Object.create(..) 而不是使用具有副作用的 Foo(..) 。这样做唯一的缺点就是需要创建一个新对象然后把旧对象抛弃掉,不能直接修改已有的默认对象。

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
推荐dojo学习笔记
Mar 24 Javascript
ExtJS Grid使用SimpleStore、多选框的方法
Nov 20 Javascript
分享几个超级震憾的图片特效
Jan 08 Javascript
JS:window.onload的使用介绍
Nov 13 Javascript
javascript删除字符串最后一个字符
Jan 14 Javascript
jQuery插件zTree实现更新根节点中第i个节点名称的方法示例
Mar 08 Javascript
ZeroClipboard.js使用一个flash复制多个文本框
Jun 19 Javascript
vue组件间通信子与父详解(二)
Nov 07 Javascript
浅谈Vue数据响应思路之数组
Nov 06 Javascript
如何使用JavaScript实现栈与队列
Jun 24 Javascript
javascript 构建模块化开发过程解析
Sep 11 Javascript
js实现贪吃蛇小游戏(加墙)
Jul 31 Javascript
javascript执行上下文、变量对象实例分析
Apr 25 #Javascript
JavaScript ECMA-262-3 深入解析(二):变量对象实例详解
Apr 25 #Javascript
JavaScript ECMA-262-3 深入解析(一):执行上下文实例分析
Apr 25 #Javascript
使用 Jest 和 Supertest 进行接口端点测试实例详解
Apr 25 #Javascript
javascript 函数的暂停和恢复实例详解
Apr 25 #Javascript
详解ES6 CLASS在微信小程序中的应用实例
Apr 24 #Javascript
Vue中函数防抖节流的理解及应用实现
Apr 24 #Javascript
You might like
总集篇&特番节目先行播出!《SAO Alicization War of Underworld》第2季度TV动画4月25日放送!
2020/03/06 日漫
PHP伪静态页面函数附使用方法
2008/06/20 PHP
php无限分类且支持输出树状图的详细介绍
2013/06/19 PHP
Zend Framework 2.0事件管理器(The EventManager)入门教程
2014/08/11 PHP
PHP按指定键值对二维数组进行排序的方法
2015/12/22 PHP
php中引用&的用法分析【变量引用,函数引用,对象引用】
2016/12/12 PHP
php 数组元素快速去重
2017/05/05 PHP
详解PHP PDO简单教程
2019/05/28 PHP
枚举JavaScript对象的函数
2006/12/22 Javascript
jQuery 使用手册(三)
2009/09/23 Javascript
javaScript 简单验证代码(用户名,密码,邮箱)
2009/09/28 Javascript
js showModalDialog参数的使用详解
2014/01/07 Javascript
Jquery实现$.fn.extend和$.extend函数
2016/04/14 Javascript
微信小程序左滑删除效果的实现代码
2017/02/20 Javascript
微信小程序开发之入门实例教程篇
2017/03/07 Javascript
nodejs操作mysql实现增删改查的实例
2017/05/28 NodeJs
JS实现移动端判断上拉和下滑功能
2017/08/07 Javascript
利用nginx + node在阿里云部署https的步骤详解
2017/12/19 Javascript
React学习笔记之高阶组件应用
2018/06/02 Javascript
JS对象与json字符串相互转换实现方法示例
2018/06/14 Javascript
vue中动态添加class类名的方法
2018/09/05 Javascript
javascript设计模式 ? 桥接模式原理与应用实例分析
2020/04/13 Javascript
js实现html滑动图片拼图验证
2020/06/24 Javascript
证券期货行业个人的自我评价
2013/12/26 职场文书
吃空饷专项治理工作实施方案
2014/03/04 职场文书
电子专业毕业生自荐信
2014/05/25 职场文书
毕业生面试求职信
2014/06/23 职场文书
个人简历自荐信
2014/06/26 职场文书
职工小家建设活动方案
2014/08/25 职场文书
2014党员学习《反腐倡廉警示教育读本》思想汇报
2014/09/13 职场文书
财务科长个人对照检查材料
2014/09/18 职场文书
2014财务年度工作总结
2014/11/11 职场文书
2015高考寄语集锦
2015/02/27 职场文书
2015年七夕情人节活动方案
2015/05/06 职场文书
金砖之国观后感
2015/06/11 职场文书
关于Nginx中虚拟主机的一些冷门知识小结
2022/03/03 Servers