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 相关文章推荐
javascript禁用键盘功能键让右击及其他键无效
Oct 09 Javascript
jQuery统计上传文件大小的方法
Jan 24 Javascript
nw.js实现类似微信的聊天软件
Mar 16 Javascript
JavaScript基本语法讲解
Jun 03 Javascript
jQuery实现的进度条效果
Jul 15 Javascript
jQuery基于ajax实现星星评论代码
Aug 07 Javascript
jQuery实现可用于博客的动态滑动菜单完整实例
Sep 17 Javascript
JavaScript无阻塞加载和defer、async详解
Feb 26 Javascript
node.js中实现kindEditor图片上传功能的方法教程
Apr 26 Javascript
微信小程序 跳转传递数据的实例
Jul 06 Javascript
在Vue组件化中利用axios处理ajax请求的使用方法
Aug 25 Javascript
浅谈Vue3.0新版API之composition-api入坑指南
Apr 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
php 无法加载mcrypt.dll的解决办法
2013/04/03 PHP
PHP输出当前进程所有变量/常量/模块/函数/类的示例
2013/11/07 PHP
jquery+php实现导出datatables插件数据到excel的方法
2015/07/06 PHP
PHP文件及文件夹操作之创建、删除、移动、复制
2016/07/13 PHP
Smarty缓存机制实例详解【三种缓存方式】
2019/07/20 PHP
用JS判别浏览器种类以及IE版本的几种方法小结
2011/08/02 Javascript
jquery validate poshytip 自定义样式
2012/11/26 Javascript
jQuery中:last-child选择器用法实例
2014/12/31 Javascript
详解AngularJS中的依赖注入机制
2015/06/17 Javascript
JS实现仿Windows7风格的网页右键菜单效果代码
2015/09/11 Javascript
jQuery操作基本控件方法实例分析
2015/12/31 Javascript
信息页文内画中画广告js实现代码(文中加载广告方式)
2016/01/03 Javascript
JS DOM实现鼠标滑动图片效果
2020/09/17 Javascript
通过Tabs方法基于easyUI+bootstrap制作工作站
2016/03/28 Javascript
jQuery插件制作的实例教程
2016/05/16 Javascript
canvas绘制的直线动画
2017/01/23 Javascript
如何快速上手Vuex
2017/02/14 Javascript
jQuery.form.js的使用详解
2017/06/14 jQuery
微信小程序实现九宫格抽奖
2020/04/15 Javascript
jQuery实现动态添加和删除input框实例代码
2019/03/26 jQuery
基于elementUI使用v-model实现经纬度输入的vue组件
2019/05/12 Javascript
jquery+ajax实现上传图片并显示上传进度功能【附php后台接收】
2019/06/06 jQuery
微信小程序使用npm包的方法步骤
2019/08/13 Javascript
JavaScript实现图片上传并预览并提交ajax
2019/09/30 Javascript
[38:32]完美世界DOTA2联赛循环赛 Forest vs DM 第二场 11.06
2020/11/06 DOTA
python判断一个集合是否包含了另外一个集合中所有项的方法
2015/06/30 Python
Python-Tkinter Text输入内容在界面显示的实例
2019/07/12 Python
Flask框架学习笔记之模板操作实例详解
2019/08/15 Python
scrapy实践之翻页爬取的实现
2021/01/05 Python
python基于Kivy写一个图形桌面时钟程序
2021/01/28 Python
html5 制作地图当前定位箭头的方法示例
2020/01/10 HTML / CSS
Marlies Dekkers内衣法国官方网上商店:国际知名的荷兰内衣品牌
2019/03/18 全球购物
L’urv官网:精品女性运动服品牌
2019/07/07 全球购物
教师节标语大全
2014/10/07 职场文书
Redis性能监控的实现
2021/07/09 Redis
JavaScript函数柯里化
2021/11/07 Javascript