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 相关文章推荐
asp.net中System.Timers.Timer的使用方法
Mar 20 Javascript
JS 加入收藏夹的代码(主流浏览器通用)
May 13 Javascript
jquery中的事件处理详细介绍
Jun 24 Javascript
jQuery控制iFrame(实例代码)
Nov 19 Javascript
Javascript中arguments对象详解
Oct 22 Javascript
JavaScript创建对象的方式小结(4种方式)
Dec 17 Javascript
JS实现1000以内被3或5整除的数字之和
Feb 18 Javascript
谈一谈bootstrap响应式布局
May 23 Javascript
js中判断变量类型函数typeof的用法总结
Aug 09 Javascript
requireJS模块化实现返回顶部功能的方法详解
Oct 16 Javascript
JavaScript运行机制实例分析
Apr 11 Javascript
浅谈Vue 自动化部署打包上线
Jun 14 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
php自动适应范围的分页代码
2008/08/05 PHP
PHP Session变量不能传送到下一页的解决方法
2009/11/27 PHP
PHP中spl_autoload_register函数的用法总结
2013/11/07 PHP
CodeIgniter使用smtp服务发送html邮件的方法
2015/06/10 PHP
YII框架中使用memcache的方法详解
2017/08/02 PHP
css3实现背景模糊的三种方式
2021/03/09 HTML / CSS
利用XMLHTTP传递参数在另一页面执行并刷新本页
2006/10/26 Javascript
formStorage 基于jquery的一个插件(存储表单中元素的状态到本地)
2012/01/20 Javascript
JQuery一种取同级值的方式(比如你在GridView中)
2012/03/15 Javascript
Javascript 鼠标移动上去小三角形滑块缓慢跟随效果
2013/04/26 Javascript
jquery实现倒计时效果
2015/12/14 Javascript
jquery+css3问卷答题卡翻页动画效果示例
2016/10/26 Javascript
解决ajax不能访问本地文件问题(利用js跨域原理)
2017/01/24 Javascript
nodejs各种姿势断点调试的方法
2020/06/18 NodeJs
vant实现购物车功能
2020/06/29 Javascript
使用TS来编写express服务器的方法步骤
2020/10/29 Javascript
[55:26]DOTA2-DPC中国联赛 正赛 Aster vs LBZS BO3 第一场 2月23日
2021/03/11 DOTA
Django的数据模型访问多对多键值的方法
2015/07/21 Python
Python 实现「食行生鲜」签到领积分功能
2018/09/26 Python
python读取指定字节长度的文本方法
2019/08/27 Python
keras slice layer 层实现方式
2020/06/11 Python
使用python matploblib库绘制准确率,损失率折线图
2020/06/16 Python
Python Socket多线程并发原理及实现
2020/12/11 Python
鼠标滚轮事件和Mac触控板双指事件
2019/12/23 HTML / CSS
挪威户外活动服装和装备购物网站:Bergfreunde挪威
2016/10/20 全球购物
世界上最大的艺术和工艺用品商店:MisterArt.com
2018/07/13 全球购物
大学生简历的个人自我评价
2013/12/04 职场文书
高中考试作弊检讨书
2014/01/14 职场文书
上班玩游戏检讨书
2014/02/07 职场文书
三年级班级文化建设方案
2014/05/04 职场文书
2014保险公司个人工作总结
2014/12/09 职场文书
故宫的导游词
2015/01/31 职场文书
优秀新员工事迹材料
2019/05/13 职场文书
2019年特色火锅店的创业计划书模板
2019/08/28 职场文书
MATLAB 如何求取离散点的曲率最大值
2021/04/16 Python
Python一些基本的图像操作和处理总结
2021/06/23 Python