
JavaScript
LM Wang
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
React生态、Vue生态与跨框架前端解决方案
有哪些前端框架原创 2025-03-02 20:34:48 · 764 阅读 · 0 评论 -
Electron学习笔记2:electron安装失败、npm start启动缺少cli.js
全局安装时,无论是否指定镜像,都会报错:搜了一下,应该是最新的Electron版本有问题。如果你也有类似的问题,可以试着这么安装:1. 指定镜像。可以搜索找到.npmrc文件,然后添加:electron_mirror="https://npm.taobao.org/mirrors/electron/"2. 指定安装的版本号。既然最新的版本可能有问题,我们就安装之前的稳定版本:n...原创 2019-10-27 13:44:56 · 6208 阅读 · 2 评论 -
Electron学习笔记1:与Node.js、Chromium、V8的关系
想必你已经被Electron网站上醒目的一行字吸引过了:使用JavaScript,HTML和CSS构建跨平台的桌面应用。用Electron开发的应用程序本质是一个Node.js应用程序,但它专注的不是Web服务器端,而是桌面应用,即用Web页面做界面。你能把它看作成一个被JavaScript控制的,精简版的Chromium浏览器。所以,可以说Electron是Node.js和Chrom...原创 2019-10-27 09:44:44 · 3634 阅读 · 0 评论 -
《重构 第2版》第1章JavaScript代码
最近把《重构 第2版》第1章看了一遍,也跟书上的例子完成了示例程序的重构,完成时的代码记录如下:invoices.json[ { "customer": "BigCo", "performances": [ { "playID": "hamlet", "audience": 55 }, { "原创 2020-11-14 16:41:10 · 348 阅读 · 0 评论 -
node.js读取JSON文件
代码如下:let path = "./plays.json";let fs = require('fs');let plays = JSON.parse(fs.readFileSync(path));console.log(plays);原创 2020-11-06 15:22:44 · 1535 阅读 · 0 评论 -
VSCode如何排除dist、.svn目录下的搜索结果
网上有人说修改File--Preferences--Settings--User--Files中的settings.json,但我试了没用,其实也可以直接在SEARCH结果中,点开配置项设置,如下图所示:原创 2019-12-28 13:53:01 · 2967 阅读 · 0 评论 -
注意把事件追加在触发该事件的句柄之前
JS使用Image类、onload()事件实现图片加载时遇到的问题。#扩展知识推荐:使用图像 Using imagesImage对象转载 2019-12-03 09:03:51 · 182 阅读 · 0 评论 -
怎么用JavaScript把一张图片装载进Canvas
JavaScript在今天的Web世界里有巨大的影响,Canvas是用JavaScript在网页上画图的一种元素。这篇文章里,我们将向你介绍,如何使用JavaScript将一张已存在的图片加载进canvas,这样我们就可以进一步进行图像处理和像素级操作了。假设我们有一张图片,像下面这样:<img id="image1" src="image1.jpg" />首先,我们动...翻译 2019-11-29 21:56:16 · 2692 阅读 · 0 评论 -
再说Node.js模块的导入导出
之前已经写过好几篇笔记了,但好像还是没有完全搞清楚,因为每次都是一些具体的问题,没有形成系统、完整的理解,这篇应该也不系统,但还是想记录几个点:1. CommonJS规范中加载模块就是加载该模块的module.exports属性// classA.jsclass MClassA { constructor() { this.a = 100; } ...原创 2019-11-05 22:17:52 · 593 阅读 · 0 评论 -
《JavaScript高级程序设计》学习笔记10:再说JSON
之前写过一篇关于JSON的笔记,现在看来当初根本没搞清楚什么是JSON。所以,即使是很简单的知识,很难一遍学会,需要两遍,甚至多遍,因为第一次往往受限于以往的经验(知识)。比如,我会迷惑于“JSON对象”和“JavaScript对象”有什么区别、“JSON字符串”和“字符串”不一样吗?当纠结于这些名词时,往往会把自己搞晕。这时候应该放弃对概念的执著,回到具体形式。而且,我之前确实忽略了:...原创 2019-10-28 09:06:05 · 182 阅读 · 0 评论 -
webpack让node.js支持import/export写法
import { EventEmitter } from 'events';//const EventEmitter = require('events');class MyEmitter extends EventEmitter { }const myEmitter = new MyEmitter();myEmitter.on('event', () => {...原创 2019-10-08 17:12:26 · 1246 阅读 · 0 评论 -
JS函数有同步和异步之分
才发现,JS一些模块的函数,会同时有同步、异步两个,比如文件读写模块fs的写入方法,有writeFile()、writeFileSync()两个,再比如新建子进程的模块child_process,其用于执行命令的方法,有exec()、execSync()两个。之前写C++,函数是不会这样做区分的,异步一般通过多线程的方式实现。...原创 2019-08-23 15:08:20 · 967 阅读 · 0 评论 -
调用tesseract,必须先读取一张图片吗
最近,为了用node.js调用tesseract的服务,很是折腾了一把。开始想,直接用tesseract的node版本,安装了node-tesseract,没有调用成功。后来,又尝试安装tesseract Github上提供的node版本,penteract,没有安装成功。然后发现,node-tesr的做法,用node.js起一个子进程去执行命令,这个方案是行得通的。我还尝试了编译tess...原创 2019-08-23 15:43:03 · 655 阅读 · 0 评论 -
继续学习RPC
之前,稍微接触和学习了一下RPC的概念。最近,又有了一些认识,记录一下。首先,进程间为什么需要通信呢?我做过很长一段时间单进程(多线程)桌面应用的开发,不同的进程一般在不同的机器上,也就是分属不同的应用程序。应用程序之间(进程之间)通信,通过网络(TCP、UDP)、串口(RS424、RS232、1553B)等方式,这种通信不是我们现在说的“进程间通信”。在接触到前端的知识后,知道了...原创 2019-08-27 14:10:08 · 161 阅读 · 0 评论 -
《JavaScript高级程序设计》学习笔记1:本质、历史和局限
第1章 JavaScript简介中说:要想全面理解和掌握JavaScript,关键在于弄清楚它的本质、历史和局限性。JavaScript出现早起,由于微软 Internet Explorer和Netscape Navigator的竞争,出现了JScript(后出现)、JavaScript两个版本的JavaScript实现。后来统一为ECMA-262(可以理解为正式文件),一种名为ECM...原创 2019-08-27 22:00:29 · 166 阅读 · 0 评论 -
《JavaScript高级程序设计》学习笔记5:JS也有位操作
我们知道「位操作」是偏底层的操作,JavaScript虽然是一门偏前端的语言,但也是支持位操作的。比如计算一个数值的二进制补码,跟我之前了解的一样:1. 求这个数值绝对值的二进制码2. 求二进制反码3. 得到的二进制反码加1而JavaScript有意思的地方是:ECMAScript会尽力向我们隐藏所有这些信息。换句话说,在以二进制字符串形式输出一个负数时,我们看到的只是...原创 2019-09-02 22:34:00 · 123 阅读 · 0 评论 -
一个例子,node.js创建的http服务
var http = require('http');var fs = require('fs');//引入文件读取模块var documentRoot = 'D:/TestJavaScript/Node/nodeServer/html';//需要访问的文件的存放目录var ff = function (req, res) { //客户端输入的url,例如如果输入localhos...原创 2019-08-21 09:20:00 · 179 阅读 · 0 评论 -
getter、setter的写法
上篇我们说,C++类的私有成员,外部(包括子类)是不能直接访问的,需要通过getA()这个方法访问,getA()叫做ClassA的getter方法(至于为什么叫getter,不清楚)。Java中也有类似不成文的规定:如果要访问一个类的private成员,就需要写getter方法。C#甚至专门有一种叫“property”的语法,实现访问类的私有成员://getter写法public cl...原创 2019-08-12 08:18:32 · 1550 阅读 · 0 评论 -
用npm安装node-tesseract的过程记录
今天用npm安装了node-tesseract,准备用JavaScript尝试一下tesseract的能力。什么是npm?npm为你和你的团队打开了连接整个JavaScript天才世界的一扇大门。就是,npm让我们可以轻松安装和使用别人开发的软件包(package、模块)。开始安装node-tesseract,直接cmd执行:npm install node-tes...原创 2019-08-15 08:40:47 · 2651 阅读 · 0 评论 -
JavaScript说请把我看做私有的
C++使用private关键字声明私有变量://ClassA.h#pragma onceclass ClassA{public: ClassA(int value); ~ClassA();private: int a;public: int getA();};//ClassA.cpp#include "classA.h"ClassA:...原创 2019-08-09 07:47:19 · 141 阅读 · 0 评论 -
ES6前后的module体系
ES6之前的模块开发方法:CommonJS,用于服务器;AMD,用于浏览器。ES6之后,在语言层面实现了模块化。原创 2019-08-13 16:49:29 · 236 阅读 · 0 评论 -
JS传参形式的选择:arguments、rest、解构
《JavaScript高级程序设计》在3.7.1节讲函数参数时说:ECMAScript函数的参数与大多数其他语言中函数的参数有所不同。ECMAScript函数不介意传递进来多少个参数,也不在乎传进来参数是什么数据类型。原因是ECMAScript中的参数在内部是用一个数组来表示的,所以可以使用arguments来访问这个参数数组。arguments是函数内部的一个特殊对象(另一个特殊对象...原创 2019-08-05 09:17:38 · 1414 阅读 · 0 评论 -
《重构 改善既有代码的设计》例子的JavaScript实现
第33页之前,即“1.4运用多态取代与价格相关的条件逻辑”之前的代码:// movie.jsclass Movie { constructor() { let CHILDRENS = 2; let REGULAR = 0; let NEW_RELEASE = 1; this._title; this...原创 2019-07-22 08:26:36 · 397 阅读 · 0 评论 -
重构if-else
这篇文章讲的很好,推荐大家看一下:6个实例详解如何把if-else代码重构成高质量代码原创 2019-07-18 07:59:48 · 1182 阅读 · 0 评论 -
《JavaScript高级程序设计》学习笔记2:域
第2章是讲如何在HTML中使用JavaScript,这个话题是绕不开的,因为发明JavaScript正是为了解决Web页面的一些问题。但这些内容貌似不会经常用到,而且显得老旧。甚至文中在介绍XHTML中JavaScript的用法时直接说:HTML5正快速地被前端开发人员采用,建议读者在学习和开发中遵循HTML5标准,本节内容可以跳过。这章我印象比较深的一个词是:「域」在讲src...原创 2019-08-28 22:13:32 · 137 阅读 · 0 评论 -
《JavaScript高级程序设计》学习笔记3:块级作用域
第3章开始讲JavaScript的基本概念,编程语言的基本概念大都从变量、类型开始。ECMAScript的变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据。对于一直写C++的人来说,刚开始用JavaScript,这个“松散类型”是最让人舒服的。3.1-3.3节让我印象最深的还是全局变量和局部变量的概念。因为我基本上是从ES6开始接触JavaScript的,也就是说,我上...原创 2019-08-29 22:05:29 · 176 阅读 · 0 评论 -
《JavaScript高级程序设计》中的那些「最」,更新...
1. Boolean类型是ECMAScript中使用得最多的一种类型。P262. Number类型应该是ECMAScript中最令人关注的数据类型了。P273. 一元操作符是ECMAScript中最简单的操作符。P364. 加法和减法这两个加性操作符应该说是编程语言中最简单的算术操作符了。P485. 忽视加法操作中的数据类型是ECMAScript编程中最常见的一个错误。P496...原创 2019-08-30 21:30:57 · 143 阅读 · 0 评论 -
JS语法之:async和await
async 表示函数里有异步操作,await表示紧跟在后面的表达式需要等待结果。在没有await的情况下执行async函数,它会立即执行,返回一个Promise对象,并且,绝不会阻塞后面的语句。 #扩展知识推荐async函数理解JavaScript的async/await...原创 2019-02-26 19:45:35 · 5627 阅读 · 0 评论 -
ES6 import/export的静态性和一一对应关系
这是最近第4篇JavaScript关于模块导出/导入的文章了。之所以会对模块引用产生一些疑问,是因为刚开始用CommonJS的写法,即require/module.exports模块,而现在改为用ES6的写法了,即import/export写法,而且ES6的写法有多种形式,头脑中有一些混淆。首先要理解这两种写法的最大不同之处是:CommonJS的模块只有一个唯一的出口,那就是mod...原创 2019-10-09 11:12:11 · 756 阅读 · 0 评论 -
ES6语法之:异步、Promise
首先,为什么要使用异步?我在一篇文章中看到这样的说法:在JavaScript的世界中,所有代码都是单线程执行的。由于这个“缺陷”,导致JavaScript的所有网络操作,浏览器事件,都必须是异步执行。说的更详细点,为什么单线程就需要异步呢?比如执行下面三个函数:fun1();fun2();fun3();如果三个函数执行速度都很快,单线程也没关系,顺序执行就是了。问题是...原创 2019-09-29 16:07:47 · 347 阅读 · 0 评论 -
ES6语法之:this的由来
今天在看阮一峰《ECMAScript 6入门》“Class的基本用法”这一章时,this关键字又引起我的注意,心想,JavaScript中的this和C++中的this一样吗?我们先来看看传统面向对象语言C++中的this:#include <iostream>using namespace std;class Student {public: Studen...原创 2019-09-23 22:27:54 · 528 阅读 · 0 评论 -
ES6语法之:解构赋值
首先要知道,这个用法有一套提取值的模式。解构就是“按照一定模式,从数组和对象中提取值”。其次,了解一些使用场合,比如下面,一次从对象p取得两个值。class Person { constructor() { this._age = 29; this._name = 'Andy'; } get age() { ret...原创 2019-09-20 08:38:41 · 210 阅读 · 0 评论 -
ES6语法之:变量提升、块级作用域、六种声明变量的方法
阮一峰《ECMAScript 6入门》 中“let和const命令”一节中提到了变量提升的概念,这个在《JavaScript高级程序设计》中好像没有提到。搜了一下,MDN web docs中提到:您在ECMAScript 2015 Language Specification之前的JavaScript文档中找不到变量提升(Hoisting)这个词。值得注意的是,变量提升发生在编译阶...原创 2019-09-19 08:47:47 · 554 阅读 · 0 评论 -
《JavaScript高级程序设计》学习笔记9:感受抽象
学过C语言或C++的同学可能很早就接触到一个名词:抽象数据类型,又名ADT(abstract data type)。根据字面意思就知道,它是一种数据类型,就像基本数据类型int、char、double一样,某种数据类型的变量是用来存储数据的,抽象数据类型的变量也不例外,只不过它多了一种思想:数据抽象和封装。《C++ Primer 第5版》第7章:类,这章开始就介绍到:类要想实现数据抽象和...原创 2019-09-11 22:54:01 · 229 阅读 · 0 评论 -
《JavaScript高级程序设计》学习笔记8:JavaScript是松散类型的
JavaScript让我喜欢的第一点是其松散类型的特点。(与C++比)ECMAScript的变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据。var message = 'hi';message = 100;除了上面这个简单的例子,JavaScript的松散类型还体现在:1. 数组ECMAScript数组的每一项可以保存任何类型的数据,也就是说,可以用数组...原创 2019-09-09 21:41:05 · 403 阅读 · 0 评论 -
《JavaScript高级程序设计》学习笔记7:确定的东西、上下文
函数的参数是按值传递还是按引用传递,这个问题是经常被讨论的。ECMAScript中所有函数的参数都是按值传递的。个人觉得,理解这类问题要抓住变的东西和不变的东西。不变的东西就是确定的规则和语法,比如.ECMAScript变量可能包含两种不同数据类型的值,基本类型值和引用类型值。基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象。注意,书上说的是值的类型而不是变量...原创 2019-09-06 08:09:31 · 153 阅读 · 0 评论 -
《JavaScript高级程序设计》学习笔记6:由label标签理解break和continue
一页页的看书才发现有label语句这么个东东。书中给出的例子是这样的:var num = 0;outermost:for (var i = 0; i < 10; i++) { for (var j = 0; j < 10; j++) { if (i == 5 && j == 5) { break outermo...原创 2019-09-04 09:09:32 · 148 阅读 · 0 评论 -
Mac VS Code快捷键(外接键盘)
1. 多行注释:Win + /2. 格式化代码:Shift + Alt + F原创 2019-09-01 11:03:57 · 486 阅读 · 0 评论 -
《JavaScript高级程序设计》学习笔记4:类型转换
第3章讲了很多类型转换的内容。先回忆一下C++这方面的知识。C++是强类型语言,所以写代码时,必须选择一种类型,为此,《C++ Primer》还给出了「如何选择类型」的建议,C++中类型转换的规则就取决于「类型所能表示的值的范围」,转换发生在算术类型之间。注意这里算术类型包括整型和浮点型,而整型又包括字符和布尔类型。「字符」就引出了我想重点说的,JavaScript和C++自动转换的区别。...原创 2019-08-31 10:38:45 · 176 阅读 · 0 评论 -
JS中for...in和for...of的区别
区别很简单,for..in遍历的是属性名,for...of遍历的是属性值for (variable in object) {...}在每次迭代时,将不同的属性名分配给变量。for (variable of iterable) { //statements}在每次迭代中,将不同属性的值分配给变量。#扩展知识推荐for...of与for...in的区别...原创 2019-07-16 11:45:53 · 1118 阅读 · 0 评论