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的第二 ...

阅读全文...

ES6 函数参数等于空大括号的用法

今天发现一段看不懂的 ES6 新语法: const http = ({ url = '', param = {}, type = 'json', callback = '', ...other } = {}) => { // ... } 我不明白为何字典参数还要用空大括号来赋值的意义。 先写一段测试代码:test.js function showInfo({name = "zhongwei", age = 99} = {}) { console.log(name); console.log(age); } function sho ...

阅读全文...

javascript array 数组只保留前 N 项

例如,在微信小程序中,只保留最近搜索的 20 条记录。 使用 js array 的 slice 方法,slice 英文是切开的意思: 第一个参数是起始下标 index,从 0 开始计数 第二个参数是结尾元素下标,但是不包含该元素。 > var a = [1, 2, 3, 4, 5]; > a.slice(0, 2) (2) [1, 2] > a.slice(0, 3) (3) [1, 2, 3] > a = a.slice(0, 3) (3) [1, 2, 3] > a (3) [1, 2, 3] ...

阅读全文...

jQuery 实现商品列表实时搜索过滤

目标效果 输入时,实时过滤 为空时,显示所有结果 url 随关键词变化 过滤逻辑 loop item title 先全部隐藏,如果 title 中有关键词,则显示 多个关键词,包含其中一个就显示 如果产品关键词中包含搜索词,也显示,例如搜索硫酸铜 影响因素 当前选中的分类 是否显示更多 未来加入的 tag 但是为了降低代码的维护难度,以及对搜索关键词的明确度的信任,我决定不考虑这三条因素。。。 tag 可以在未来考虑一下。 实时过滤效果并不好 jquery 监听 input 事件,如何排除中文拼音输入法敲字母的过程 da da'y da'yi da'yin da'yin'j da' ...

阅读全文...