JavaScript中 instanceof 的实现原理
一 定义 标准的MDN定义:用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。 用简单通俗的话来说就是,判断左侧是否为右侧的实例化对象。 二 使用方法 使用格式为:a instanceof b。其中,左侧 a 为对象,右侧 b 必须为函数类型。 示例代码如下 ‘abc’ … 阅读更多 »JavaScript中 instanceof 的实现原理
一 定义 标准的MDN定义:用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。 用简单通俗的话来说就是,判断左侧是否为右侧的实例化对象。 二 使用方法 使用格式为:a instanceof b。其中,左侧 a 为对象,右侧 b 必须为函数类型。 示例代码如下 ‘abc’ … 阅读更多 »JavaScript中 instanceof 的实现原理
Image是HTMLImageElement的封装类,或者说HTMLImageElement是Image的基类。在前端开发中,创建一个图像有时会使用如下代码。 let img = new Image(); … img.src = url; return img; 如果重写src的set操作,可使… 阅读更多 »如何修改Image或HTMLImageElement的src属性实现
1. Set 基本用法 ES6新增了Set,它类似于数组,但是成员的值不会重复,都是唯一的。 const s = new Set(); [1, 2, 3, 4, 3, 2, 1].forEach(x => s.add(x)); for (let i of s) { console.log(i); }… 阅读更多 »ES6入门教程笔记(10)-Set和Map
ES6对对象的扩展非常多,本文只介绍自己感兴趣的若干,需要完整的请阅读文末原文。 属性的简洁表示法 ES6允许直接写入变量和方法,作为对象的属性和方法。这种写法更加简洁。 let x = 1; let name = ‘root’; // ES5 let obj = { x:x, name:name … 阅读更多 »ES6入门教程笔记(9)-对象的扩展
ES6对数组的扩展非常多,本文只介绍自己感兴趣的若干,需要完整的请阅读文末的原文。 flat() 数组的成员可能还是数组,Array.prototype.flat()可以将嵌套的数组“拉平”,变成一维的数组。该方法返回一个新的数组。 [1, 2, [3, 4]].flat() // [1, 2, 3… 阅读更多 »ES6入门教程笔记(8)-数组的扩展
基本用法 ES6允许使用“箭头”(=>)定义函数。 // 箭头函数 let f = () => 5; // ES5 let f = function() { return 5; }; 箭头函数用圆括号代表参数部分,如果代码部分多于一条语句,就用大括号括起来。 // 箭头函数 let sum = (n… 阅读更多 »ES6入门教程笔记(7)-箭头函数
1 函数参数的默认值 基本用法 ES6之前,函数参数不能指定默认值,只能用变通的方法。 function print(x, y) { y = y || ‘World’; console.log(x, y); } print(‘Hello’) // “Hello World” print(‘Hello… 阅读更多 »ES6入门教程笔记(6)-函数的扩展
Number.parseInt(), Number.parseFloat() ES6将全局方法parseInt()和parseFloat(),移植到Number对象上面,用法保持不变。 // ES5的写法 parseInt(‘12.34’) // 12 parseFloat(‘123.45#’) /… 阅读更多 »ES6入门教程笔记(5)-数值的扩展
字符串的遍历器接口 ES6为字符串添加了遍历器接口,使字符串可以被for…of循环遍历。 for (let c of ‘foo’) { console.log(c); } // “f” // “o” // “o” 这个遍历器最大的优点是可以识别大于0xFFFF的Unicode码点,而传统的for… 阅读更多 »ES6入门教程笔记(4)-字符串的扩展
ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。 1 数组的解构赋值 基本用法 以前,为变量赋值,只能直接指定值。 let a = 1; let b = 2; let c = 3; 现在,ES6可以这样写: let [a, b, c] = [… 阅读更多 »ES6入门教程笔记(3)-变量的解构赋值
1 let命令 ES6新增了let命令,用来声明变量。它的用法和var类似,但有以下几点区别: – let声明的变量,只在所在的代码块内有效。 – let声明的变量,一定要在声明后才能使用,否则报错。 – 不允许在相同作用域内,重复声明同一个变量。 2 块级作用域 ES5只有全局作用域和函数作用域,… 阅读更多 »ES6入门教程笔记(2)-let、const和var的区别
ECMAScript 6.0(简称ES6)是JavaScript语言的下一代标准,于2015年6月正式发布。它的目标,是使JavaScript语言可以用来编写复杂的大型应用程序,成为企业级开发语言。 1 ECMAScript和JavaScript的关系 1996年11月,JavaScript的创造者… 阅读更多 »ES6入门教程笔记(1)-ECMAScript6简介
1 什么是JSON JSON(JavaScript Object Notation)是一种用于数据交换的文本格式,目的是取代繁琐笨重的XML格式。JSON格式提出后,被迅速接受,并成为各大网站交换数据的标准格式。 JSON格式有两个显著优点: 书写简单,一目了然; 符合JavaScript原生语法,… 阅读更多 »JavaScript入门教程笔记(18)-JSON对象
JavaScript中正则表达式的功能由RegExp对象提供。 1 概述 正则表达式(Regular expression)是一种表达文本模式(即字符串结构)的方法,有点像是字符串的模板,常用来按照“指定模式”匹配文本。例如,可以用正则表达式定义好一个邮箱地址的模式,然后用它来检查某个字符串是否为有… 阅读更多 »JavaScript入门教程笔记(17)-正则表达式
JavaScript中定时执行代码的功能,叫做定时器(timer),主要有setTimeout和setInterval两个方法。 1 setTimeout() setTimeout方法用来指定某个函数或某段代码,在多少毫秒后执行。它返回一个整数,表示定时器的ID,可以用来取消这个定时器。 var t… 阅读更多 »JavaScript入门教程笔记(16)-定时器
1 单线程模型 单线程模型是指,JavaScript只在一个线程上运行,同时只能执行一个任务。 但是,这不是说JavaScript引擎只有一个线程,事实上,JavaScript引擎有多个线程,单个脚本只能在一个线程上运行(称为主线程),其它线程都是在后台配合。 JavaScript之所以采用单线程,… 阅读更多 »JavaScript入门教程笔记(15)-异步操作
1 对象是什么 对象是单个实物的抽象。通常有一个模板表示共同特征,然后对象根据这个模板生成。 典型的面向对象编程语言(比如C++和Java),都有“类”(class)这个概念。所谓“类”就是对象的模板,对象就是“类”的实例。但是JavaScript的对象体系,不是基于“类”的,而是基于构造函数(co… 阅读更多 »JavaScript入门教程笔记(14)-实例对象与 new 命令
大部分面向对象的编程语言,都是通过“类”(class)来实现对象的继承。而JavaScript语言不一样,是通过“原型对象”(prototype)来实现的,本文介绍JavaScript的原型链继承。 ES6引入了class语法,基于class的继承将在后面介绍。 1 原型对象概述 1.1 构造函数的… 阅读更多 »JavaScript入门教程笔记(12)-对象的继承
1 定义 this关键字是一个非常重要的语法点,不理解它的含义,大部分开发任务都很难完成。 无论什么场合,this总是返回一个对象。简单说,this就是属性或方法“当前”所在的对象。 var person = { name: ‘mark’, say: function() { return ‘nam… 阅读更多 »JavaScript入门教程笔记(11)-this关键字
1 概述 JavaScript 提供了10种算术运算符,用来完成基本的算术运算。 加法运算符:x + y 减法运算符: x – y 乘法运算符: x * y 除法运算符:x / y 指数运算符:x ** y 余数运算符:x % y 自增运算符:++ x 或者 x ++ 自减运算符:–x 或者 x-… 阅读更多 »JavaScript入门教程笔记(10)-运算符