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 相关文章推荐
js程序中美元符号$是什么
Jun 05 Javascript
$.ajax json数据传递方法
Nov 19 Javascript
浅析js设置控件的readonly与enabled属性问题
Dec 25 Javascript
javascript函数定义的几种区别小结
Jan 06 Javascript
jQuery+ajax实现动态执行脚本的方法
Jan 27 Javascript
JQuery实现图片轮播效果
May 08 jQuery
解决vue 项目引入字体图标报错、不显示等问题
Sep 01 Javascript
JavaScript简单实现的仿微博留言功能示例
Jan 17 Javascript
JS中getElementsByClassName与classList兼容性问题解决方案分析
Aug 07 Javascript
微信小程序封装分享与分销功能过程解析
Aug 13 Javascript
Vue中axios的封装(报错、鉴权、跳转、拦截、提示)
Aug 20 Javascript
JavaScript实现简单进度条效果
Mar 25 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 allow_url_include的应用和解释
2010/04/22 PHP
PHP常用正则表达式集锦
2014/08/17 PHP
php目录遍历函数opendir用法实例
2014/11/20 PHP
php获取访问者IP地址汇总
2015/04/24 PHP
laravel通过创建自定义artisan make命令来新建类文件详解
2017/08/17 PHP
PHP实现的函数重载功能示例
2018/08/03 PHP
Javascript与vbscript数据共享
2007/01/09 Javascript
jQuery 版本的文本输入框检查器Input Check
2009/07/09 Javascript
Node.js中的事件驱动编程详解
2014/08/16 Javascript
jQuery中$.grep() 过滤函数 数组过滤
2016/11/22 Javascript
Bootstrap基本插件学习笔记之轮播幻灯片(23)
2016/12/08 Javascript
AngularJS控制器controller给模型数据赋初始值的方法
2017/01/04 Javascript
引入JavaScript时alert弹出框显示中文乱码问题
2017/09/16 Javascript
Vue 页面切换效果之 BubbleTransition(推荐)
2018/04/08 Javascript
vue 点击按钮增加一行的方法
2018/09/07 Javascript
JavaScript实现省市联动效果
2019/11/22 Javascript
JS实现炫酷雪花飘落效果
2020/08/19 Javascript
ant design vue中表格指定格式渲染方式
2020/10/28 Javascript
[02:36]DOTA2亚洲邀请赛小组赛精彩集锦:奇迹哥卡尔秀翻全场
2017/03/28 DOTA
Python开发如何在ubuntu 15.10 上配置vim
2016/01/25 Python
Python实现的购物车功能示例
2018/02/11 Python
Flask 让jsonify返回的json串支持中文显示的方法
2018/03/26 Python
Django如何自定义model创建数据库索引的顺序
2019/06/20 Python
Python 中的 global 标识对变量作用域的影响
2019/08/12 Python
Python 词典(Dict) 加载与保存示例
2019/12/06 Python
python的Jenkins接口调用方式
2020/05/12 Python
详解Python的爬虫框架 Scrapy
2020/08/03 Python
Python3如何使用tabulate打印数据
2020/09/25 Python
用pushplus+python监控亚马逊到货动态推送微信
2021/01/29 Python
如何打开WebSphere远程debug
2014/10/10 面试题
理货员的岗位职责
2013/11/23 职场文书
英语专业毕业生求职信
2014/05/24 职场文书
刑事辩护授权委托书
2014/09/13 职场文书
2014大四本科生自我鉴定总结
2014/10/04 职场文书
2015年党小组工作总结
2015/05/26 职场文书
解决Python保存文件名太长OSError: [Errno 36] File name too long
2022/05/11 Python