Javascript

分类下相关文章

js 中类似 python set 的数据类型

我在写一个自动选课的插件,需要先扫描几千个课程,然后统计出所有课程所属的类目。 这个类目,需要去重,然后列举出来,如果能用 python set 类型来统计,就非常方便了。 但是不知道 js 是否支持这样的数据类型。 查了一下,果然已经支持。在 Chrome 里测试了一下,非常方便 > let s = new Set(); > s Set(0) {} > s.add(1) Set(1) {1} > s.add(2) Set(2) {1, 2} > s.add(3) Set(3) {1, 2, 3} > s.add(3) Set(3) {1, 2, 3} / ...

阅读全文...

js 浮点数精度问题

js 中使用 float 浮点数类型,会发现运算时结果表示出人意料 问题现象 2.4 - 2.25 > 0.1499999999999999 0.1 + 0.2 > 0.30000000000000004 看来这是一个经典的问题。 解决方法一 转换成整数进行计算 (2.4 * 100 - 2.25 * 100) / 100 > 0.15 解决方法二 如果计算不求精确,四舍五入即可 (0.1 + 0.2).toFixed(2) > "0.30" 方案一的漏洞 2.3 * 100 > 229.99999999999997 2.3 * 10 ...

阅读全文...

JS 给长串数字添加逗号分隔符

例如,我想用 js 实现将数字 1000,显示成 1,000 的格式。 实现方法 let x = 100000000000000; x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); > "100,000,000,000,000" 参考 https://stackoverflow.com/questions/2901102/how-to-print-a-number-with-commas-as-thousands-separators-in-javascript ...

阅读全文...

Javascript Array Buffer 与字符串相互转换

由于要跟蓝牙设备交互,在传递浮点数时,想用 ascii 进行编码。 问题来了,22.22 这样的浮点数,用 ascii 码表示时,如何进行 array buffer 与 string 的相互转换。 解析数据实现代码 function ab2str(buf) { return String.fromCharCode.apply(null, new Uint8Array(buf)); } 由于是用了 AscII 编码 (256 个字符),所以一个字符是用 1 个字节,即 8 bit 表示。 这里用 Uint8 来解析。 参考 https://stackoverflow.com/questio ...

阅读全文...

Javascript 处理二机制 bit 位

返回的数据是一个字节,即 8 bit 位,每一个 bit 代表一个设备状态的开启与否。 即 8 个不同设备的开启状态。 如何用 Javascript 来解析二机制状态位呢? 开关作用 可以通过 dataView.getUint8(N) 将返回的一个字节数据 array buffer 转换成整数,例如下面的 flags。 然后通过开关位比对来判断其状态: var flags = 5; // 二进制的0101 if (flags & 4) { // ... } // 0101 & 0100 => 0100 => true 注意,这里是单个与符号,两个就是逻辑与符 ...

阅读全文...

JS 将日期时间字符串转换成包含 TZ 的 UTC 时间

我想将小程序中获取到的日期和时间,转换成 UTC 时间,格式如: 2021-12-25T08:08:08Z 好方便传输给后台,进行 InfluxDB 时间区间过滤。 转换方法 先拼接成不加 Z 结尾的字符串。不加 Z 代表是当前 locale 对应的市区。 > let d = new Date(Date.parse("2019-01-01T00:00:00")); Tue Jan 01 2019 00:00:00 GMT+0800 (中国标准时间) d.toISOString() "2018-12-31T16:00:00.000Z" d.t ...

阅读全文...

node module 包名以 @ 符号为前缀是什么意思

例如在一段 Ant Design Pro V5 的代码中看到: import { Button, message, Input, Drawer } from 'antd'; import React, { useState, useRef } from 'react'; import { useIntl, FormattedMessage } from 'umi'; import { PageContainer, FooterToolbar } from '@ant-design/pro-layout'; import type { ProColumns, ActionType } from ...

阅读全文...

使用 async / await 实现 setTimeout 的同步写法

在 tampermonkey 的很多实际使用场景中,需要在模拟点击之后,等待界面变化,或者数据返回,此时就需要用到 setTimeout。但是如果是一系列的点击等待,就需要进行 setTimeout 嵌套,或者 setTimeout 时间进行倍数增长,代码可读性非常低。 所以,我想找一种 setTimeout 同步的写法,以提高代码的可维护性。 测试代码 (function() { 'use strict'; function wait(ms) { return new Promise((resolve, reject) => { ...

阅读全文...

querySelectorAll 通过页面按钮的文本内容来选择相应标签

由于 58 同城的开放平台申请接口权限一直处于审核中,而想要用的一个接口没有使用文档,也无法联系到人类客服询问,只能采取浏览器插件的方式做数据导出。 58同城管理后台为了防爬虫,做了诸多的防爬策略,其中一种就是没有明确的 class 和 id。 例如,管理后台的全选按钮: <span class="t-g-checkbox-font">全选</span> class 选择的话符合条件的很多。只能通过 inner text 来匹配。 解决方法 Array.from(document.querySelectorAll('span.t-g-checkbo ...

阅读全文...

js 获取页面内 ID 重复的多个节点

由于网页 HTML 写的不规范,存在大量的重复 ID 节点。使用 jQuery 只能获取第一个匹配的 ID。 用纯 Javascript 和 jQuery 测试了一下,结果如下: 可行的方法 > document.querySelectorAll("#city") NodeList(60) 可以获取到所有的 ID 为 city 的节点。 不可行的方法 $("#city") $('[id="city"]'); $('tr[some_attribute="xxx"]') 均只能返回一行数据。 ...

阅读全文...

js 三元表达式的简写形式

在微信小程序的 wxml 模板里写三元表达式写吐了,满眼都是这种逻辑: <image src="{{member.user.avatar ? member.user.avatar : '/images/default_avatar.png'}}" /> 查了一下 js 里确实存在简写形式: <image src="{{member.user.avatar || '/images/default_avatar.png'}}" /> expr1 || expr2 若 expr1 可转换为 true,则返回 expr1;否则,返回 ...

阅读全文...

js 除法保留两位小数

当金额存储以分单位需要转换为元时,需要除以100。 JS 中如果直接除 100,显示的格式比较乱 > 1001 / 100 10.01 > 1000 / 100 10 统一保留两位小数 function formatMoney(money) { return (money * 1.0 / 100).toFixed(2) } > formatMoney(1000) "10.00" > formatMoney(1001) "10.01" ...

阅读全文...

jquery 判断元素可见性

正在做的一个自动挂学时的 tampermonkey 插件,遇到一个问题。 即如何判断定时出现的答题页面,如果是判断题目标题是否存在,会有 bug。因为可能外层的还包了一层 div,而外层 div 设置了 css 样式 display: none。 所以,我需要能使用 jQuery 判断一个元素是否可见,包括其祖先也必须是可见的。 找了半天没有找到解决方案,只能判断其最外层的是否设置了 display none。 if ($('.some_window') && $('.some_window').css("display") != "none&qu ...

阅读全文...

javascript 合并两个数组

在写微信小程序时,经常需要将接口返回的数组,追加到当前 array。即,合并两个数组。 两种实现方式 var a1 = [1, 2, 3]; var a2 = [4, 5, 6]; // 方法一 a1.concat(a2) > (6) [1, 2, 3, 4, 5, 6] // 方法二,ES6 新语法 [...a1, ...a2] > (6) [1, 2, 3, 4, 5, 6] 哪种写法可读性更好 我觉得 concat 的写法,可读性更好一些。 ...

阅读全文...

ES6 Promise

promise 的意义 解决了之前不断嵌套异步回调的问题。 可以以同步的语法,来执行异步的操作。 参数 resolve 与 reject 是用来做什么的 以封装微信小程序的 wx.request 来统一处理错误码为例。 promise 对象必须使用 resolve 和 reject 做为返回么 then 必须使用两个回调函数作为参数么? 我看还有使用一个参数的情况。 原来,第二个参数是可选的,即不处理 reject 的情况。 then 的 catch 与第二个回调函数同时存在时会用哪个 then的第二个参数和catch方法都存在的情况下,只有then的第二个参数能捕获到; 如果then的第二 ...

阅读全文...