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 无限级 Select效果实现代码(json格式)
Aug 30 Javascript
JavaScript实现自动消除按钮功能的方法
Aug 05 Javascript
angularjs创建弹出框实现拖动效果
Aug 25 Javascript
完美解决input[type=number]无法显示非数字字符的问题
Feb 28 Javascript
JS数组操作中的经典算法实例讲解
Jul 26 Javascript
详解为Bootstrap Modal添加拖拽的方法
Jan 05 Javascript
vue 实现类似淘宝星级评分的示例
Mar 01 Javascript
layui表格checkbox选择全选样式及功能的实例
Mar 07 Javascript
Vue.js 通过jQuery ajax获取数据实现更新后重新渲染页面的方法
Aug 09 jQuery
Echarts之悬浮框中的数据排序问题
Nov 08 Javascript
Vue拖拽组件列表实现动态页面配置功能
Jun 17 Javascript
Layui数据表格判断编辑输入的值,是否为我需要的类型详解
Oct 26 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之第十天
2006/10/09 PHP
浅谈php serialize()与unserialize()的用法
2013/06/05 PHP
给ECShop添加最新评论
2015/01/07 PHP
php常用图片处理类
2016/03/16 PHP
phplist及phpmailer(组合使用)通过gmail发送邮件的配置方法
2016/03/30 PHP
浅谈PHP拦截器之__set()与__get()的理解与使用方法
2016/10/18 PHP
Thinkphp5.0自动生成模块及目录的方法详解
2017/04/17 PHP
[原创]来自ImageSee官方 JavaScript图片浏览器
2008/01/16 Javascript
JavaScript 事件查询综合
2009/07/13 Javascript
extJs 常用到的增,删,改,查操作代码
2009/12/28 Javascript
纯JS实现五子棋游戏兼容各浏览器(附源码)
2013/04/24 Javascript
阻止子元素继承父元素事件具体思路及实现
2013/05/02 Javascript
ie8 不支持new Date(2012-11-10)问题的解决方法
2013/07/31 Javascript
关于JS中的闭包浅谈
2013/08/23 Javascript
jquery基础教程之数组使用详解
2014/03/10 Javascript
调用jQuery滑出效果时闪烁的解决方法
2014/03/27 Javascript
基于Bootstrap+jQuery.validate实现Form表单验证
2014/12/16 Javascript
angular.element方法汇总
2015/01/07 Javascript
jQuery仅用3行代码实现的显示与隐藏功能完整实例
2015/10/08 Javascript
浅谈JS之tagNaem和nodeName
2016/09/13 Javascript
angular.js实现列表orderby排序的方法
2018/10/02 Javascript
微信小程序与后台PHP交互的方法实例分析
2018/12/10 Javascript
layui实现给某一列加点击事件
2019/10/26 Javascript
python计数排序和基数排序算法实例
2014/04/25 Python
Python自定义线程类简单示例
2018/03/23 Python
python实现银联支付和支付宝支付接入
2019/05/07 Python
Python绘图实现台风路径可视化代码实例
2020/10/23 Python
Django-silk性能测试工具安装及使用解析
2020/11/28 Python
Grid 宫格常用布局的实现
2020/01/10 HTML / CSS
美国林业供应商:Forestry Suppliers
2019/05/01 全球购物
机械专业个人求职自荐信格式
2013/09/21 职场文书
俄罗斯商务邀请函
2014/01/26 职场文书
售后客服个人自我评价
2014/09/14 职场文书
医学检验专业自荐信
2014/09/18 职场文书
微信小程序和php的登录实现
2021/04/01 PHP
Canvas跟随鼠标炫彩小球的实现
2021/04/11 Javascript