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 文件本身编码转换 图文教程
Oct 12 Javascript
js 未结束的字符串常量错误解决方法
Jun 13 Javascript
JavaScript面向对象(极简主义法minimalist approach)
Jul 17 Javascript
利用JavaScript检测CPU使用率自己写的
Mar 22 Javascript
jQuery获取字符串中出现最多的数
Feb 22 Javascript
node.js实现端口转发
Apr 14 Javascript
完美解决jQuery 鼠标快速滑过后,会执行多次滑出的问题
Dec 08 Javascript
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
Dec 14 Javascript
用jQuery.ajaxSetup实现对请求和响应数据的过滤
Dec 20 Javascript
AngularJS入门示例之Hello World详解
Jan 04 Javascript
微信小程序登录换取token的教程
May 31 Javascript
JavaScript笛卡尔积超简单实现算法示例
Jul 30 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
我的论坛源代码(十)
2006/10/09 PHP
使用Sphinx对索引进行搜索
2013/06/25 PHP
PHP面向对象之领域模型+数据映射器实例(分析)
2017/06/21 PHP
php xhprof使用实例详解
2019/04/15 PHP
jsp js鼠标移动到指定区域显示选项卡离开时隐藏示例
2013/06/14 Javascript
把jQuery的类、插件封装成seajs的模块的方法
2014/03/12 Javascript
常用的jQuery前端技巧收集
2014/12/24 Javascript
JavaScript基础函数整理汇总
2015/01/30 Javascript
jQuery右下角旋转环状菜单特效代码
2015/08/10 Javascript
JavaScript SHA512&SHA256加密算法详解
2015/08/11 Javascript
js调用百度地图及调用百度地图的搜索功能
2015/09/07 Javascript
浅谈js多维数组和hash数组定义和使用
2016/07/27 Javascript
微信小程序 基础知识css样式media标签
2017/02/15 Javascript
vue自定义filters过滤器
2018/04/26 Javascript
bootstrap select2插件用ajax来获取和显示数据的实例
2018/08/09 Javascript
Vue前后端不同端口的实现方法
2018/09/19 Javascript
Javascript的this详解
2019/03/23 Javascript
vue 动态生成拓扑图的示例
2021/01/03 Vue.js
[00:32]2018DOTA2亚洲邀请赛OpTic出场
2018/04/03 DOTA
[00:27]DOTA2荣耀之路2:Patience from zhou!
2018/05/24 DOTA
python登录豆瓣并发帖的方法
2015/07/08 Python
Python解析excel文件存入sqlite数据库的方法
2016/11/15 Python
numpy.array 操作使用简单总结
2019/11/08 Python
python 画3维轨迹图并进行比较的实例
2019/12/06 Python
H5 video poster属性设置视频封面的方法
2020/05/25 HTML / CSS
canvas绘制图片drawImage使用方法
2020/09/15 HTML / CSS
什么造成了Java里面的异常
2016/04/24 面试题
大一自我鉴定范文
2013/10/04 职场文书
教师推荐信范文
2013/11/24 职场文书
开朗女孩的自我评价
2014/02/10 职场文书
《阳光》教学反思
2014/02/23 职场文书
大学开学计划书
2014/04/30 职场文书
就业协议书样本
2014/08/20 职场文书
租车协议书
2015/01/27 职场文书
python 模块重载的五种方法
2021/04/24 Python
Python Pandas常用函数方法总结
2021/06/15 Python