炫友-blog - JavaScript
type: channel
link: https://blog.xydeer.top/index.php/category/JavaScript/
items: Javascript的for循环的in和of
items: JavaScript 十六进制与字符串互相转(HEX)
items: JavaScript-Socket5代理使用
items: JavaScript-JSON.parse转换number精度问题
items: ES6笔记
items: Script Cat-智慧树
items: 学习助手
items: 内部重启执行fuction，setInterval()
items: nodejs includes用法
items: Nodejs获取本地时间Date()

Javascript的for循环的in和of
type: item
date: 2025-11-02T11:20:00+08:00
description: #for invar obj = { "name": "小白", "age": 18, } for (let key in obj) { console.log("key=>" + key) console.log("obj[key]=>" + obj[key]) } var objarr = [ { "name": "小白", "age": 18, }, { "name": "小绿", "age": 19, } ] for (let key in objarr) { console.log("key=>" + key) console.log("objarr[key]=>" + objarr[key]) } for of这个获取的就是值了，所以单独没有迭代的对象遍历不了var obj = { "name": "小白", "age": 18, } for (let key of obj) { console.log("key=>") console.log(key) console.log("obj[key]=>" + obj[key]) } 如果非要所以of获取，那么先获取keys吧Object.keys(obj)最后根据键值获取

JavaScript 十六进制与字符串互相转(HEX)
type: item
date: 2025-08-21T20:44:16+08:00
description: 使用Buffer.from("原文","原文类型")先转换为二进制缓冲区，再转换为需要的类型再使用数据.toString("需要的类型")即可获取原文转十六进制十六进制转原文

JavaScript-Socket5代理使用
type: item
date: 2025-07-25T12:42:00+08:00
description: axios安装两个包socks-proxy-agent，axios const { SocksProxyAgent } = require('socks-proxy-agent'); const axios = require('axios'); const socks5Axios = axios.create(); const socks5 = () => { const socks5Agent = new SocksProxyAgent("socks5://112.194.88.24:13314"); socks5Axios.defaults.httpsAgent = socks5Agent; socks5Axios.defaults.proxy = false; socks5Axios.get("https://ipinfo.io").then((res) => { console.log(res.data); }).catch((err) => { console.log(err.message); }); }; socks5() fetch安装一个包socks-proxy-agentconst { SocksProxyAgent } = require('socks-proxy-agent'); const socks5Agent = new SocksProxyAgent("socks5://220.161.241.29:11315"); async function fetchWithSocks5() { try { const response = await fetch('https://ipinfo.io/json', { method: "GET", agent: socks5Agent, timeout: 30000 }); if (!response.ok) { throw new Error(`状态码错误: ${response.status}`); } const res_msg = await response.text() console.log(res_msg); return response } catch (err) { console.error('fetch 代理请求失败:', err.message); } } fetchWithSocks5()

JavaScript-JSON.parse转换number精度问题
type: item
date: 2025-07-21T09:16:12+08:00
description: 问题:转换后精度不对因为 JSON.parse 默认会将数值字符串（如 "4448889908567611234"）转换为 JavaScript 的 Number 类型，而 Number 无法精确表示这么大的整数。解决方案导入json-bigint模块npm install json-bigint所有JSONbig.parse转换

ES6笔记
type: item
date: 2025-06-28T09:54:00+08:00
description: const,var,let作用域挂载window模板匹配使用反引号包裹，${}引入变量

Script Cat-智慧树
type: item
date: 2023-12-22T23:26:00+08:00
description: // @name 【万能】全平台自动答题脚本 //自定义题库接口,可以自己新增接口，以下仅作为实例 返回的比如是一个完整的答案的列表，如果不复合规则可以自定义传格式化函数 例如 [['答案'],['答案2'],['多选A','多选B']] answerApi: { tikuAdapter: data => { const tiku_adapter = GM_getValue("tiku_adapter"); const url = tiku_adapter && !tiku_adapter.includes("undefined") ? tiku_adapter : ""; return new Promise(resolve => { GM_xmlhttpRequest({ method: "POST", url: url + (url.includes("?") ? "&" : "?") + "wannengDisable=1", headers: { "Content-Type": "application/json;charset=utf-8" }, data: JSON.stringify({ question: data.question, options: data.options, type: data.type }), onload: function(r) { try { const res = JSON.parse(r.responseText); resolve(res.answer.allAnswer); } catch (e) { resolve([]); } }, onerror: function(e) { console.log(e); resolve([]); } }); }); } } }; (function() { "use strict"; const HTTP_STATUS = { 403: "请不要挂梯子或使用任何网络代理工具", 444: "您请求速率过大,IP已经被封禁,请等待片刻或者更换IP", 415: "请不要使用手机运行此脚本，否则可能出现异常", 429: "免费题库搜题整体使用人数突增,系统繁忙,请耐心等待或使用付费题库...", 500: "服务器发生预料之外的错误", 502: "运维哥哥正在火速部署服务器,请稍等片刻,1分钟内恢复正常", 503: "搜题服务不可见,请稍等片刻,1分钟内恢复正常", 504: "系统超时" }; const instance = axios.create({ baseURL: "https://lyck6.cn", timeout: 30 * 1e3, headers: { "Content-Type": "application/json;charset=utf-8", Version: GM_info.script.version }, validateStatus: function(status) { return status === 200; } }); instance.interceptors.response.use(response => { return response.data; }, error => { try { const code = error.response.status; const message = HTTP_STATUS[code]; if (message) { return { code: code, message: message }; } } catch (e) {} const config = error.config; return new Promise(resolve => { GM_xmlhttpRequest({ method: config.method, url: config.baseURL + config.url, headers: config.headers, data: config.data, timeout: config.timeout, onload: function(r) { if (r.status === 200) { try { resolve(JSON.parse(r.responseText)); } catch (e) { resolve(r.responseText); } } else { resolve({ code: r.status, message: HTTP_STATUS[r.status] || "错误码:" + r.status }); } } }); }); }); const baseSer…

学习助手
type: item
date: 2023-12-18T09:34:00+08:00
description: 答题// ==UserScript== // @name 💯【超星学习通满分助手】支持任务点自动跳转|章节测验、作业、考试全网检索答案，简答题支持chatgpt对接|音频、视频全自动静音播放|可视化参数配置 // @namespace askAuto // @version 2.1.2 // @author shushoujiu // @description 💯超星学习通满分助手，挂机解放时间，无需任何操作自动完成所有任务点。汇集全网免费、付费题库接口支持一键对接，答案更全更靠谱。 // @icon https://vitejs.dev/logo.svg // @match *://*.chaoxing.com/* // @match *://*.edu.cn/* // @match *://*.nbdlib.cn/* // @match *://*.hnsyu.net/* // @match *://*.gdhkmooc.com/* // @require https://cdn.staticfile.org/vue/3.3.4/vue.global.prod.js // @require https://cdn.staticfile.org/vue-demi/0.14.0/index.iife.min.js // @require https://cdn.staticfile.org/element-plus-icons-vue/2.1.0/global.iife.min.js // @require data:application/javascript,window.Vue%3DVue%3B // @require https://cdn.staticfile.org/pinia/2.1.6/pinia.iife.prod.js // @require https://cdn.staticfile.org/element-plus/2.3.12/index.full.min.js // @require https://cdn.staticfile.org/blueimp-md5/2.19.0/js/md5.min.js // @require https://cdn.staticfile.org/jquery/3.7.1/jquery.min.js // @resource element-plus https://cdn.staticfile.org/element-plus/2.3.12/index.css // @resource ttf https://www.forestpolice.org/ttf/2.0/table.json // @connect cx.icodef.com // @connect tk.enncy.cn // @connect api.muketool.com // @connect api.tikuhai.com // @grant GM_addStyle // @grant GM_getResourceText // @grant GM_getValue // @grant GM_info // @grant GM_setValue // @grant GM_xmlhttpRequest // @grant unsafeWindow // @run-at document-end // @antifeature ads 脚本可能包含第三方接口广告 // @antifeature payment 脚本存在第三方答题接口付费功能 // @downloadURL https://update.greasyfork.org/scripts/436994/%F0%9F%92%AF%E3%80%90%E8%B6%85%E6%98%9F%E5%AD%A6%E4%B9%A0%E9%80%9A%E6%BB%A1%E5%88%86%E5%8A%A9%E6%89%8B%E3%80%91%E6%94%AF%E6%8C%81%E4%BB%BB%E5%8A%A1%E7%82%B9%E8%87%AA%E5%8A%A8%E8%B7%B3%E8%BD%AC%7C%E7%AB%A0%E8%8A%82%E6%B5%8B%E9%AA%8C%E3%80%81%E4%BD%9C%E4%B8%9A%E3%80%81%E8%80%83%E8%AF%95%E5%85%A8%E7%BD%91%E6%A3%80%E7%B4%A2%E7%AD%94%E6%A1%88%EF%BC%8C%E7%AE%80%E7%AD%94%E9%A2%98%E6%94%AF%E6%8C%81chatgpt%E5%AF%B9%E6%8E%A5%7C%E9…

内部重启执行fuction，setInterval()
type: item
date: 2023-07-30T11:45:58+08:00
description: 结构setInterval(functionnname,时间) //时间毫秒为单位function jiafa(b){ a=0 a+=1 console.log(a); console.log(b); } setInterval(jiafa,1000) // 1 // undefined // 1 // undefined // 1 // undefined // 每一次都素重启，不会连续执行 // 可以命名为赋值给其他参数，以至于可以停止 const function1=setInterval(jiafa,1000) setTimeout(function(){ clearInterval(function1) },5000) //定时5s后停止 // 如果需要传参数，那么就调用的时候 b=3 const function2=setInterval(function(){ jiafa(b) },1000) // 1 // 3 // 1 // 3 // 1 // 3

nodejs includes用法
type: item
date: 2023-07-27T13:16:00+08:00
description: // 注意字符串定义的时候使用 ` ` const text1=`如果再给我一次机会` const text2=`我会重新选择` //这里就查看有没有`机会`这个词语 function ifinclude(text){ if(text.includes("机会")) { console.log("包含机会："+text); } } ifinclude(text1) //包含机会：如果再给我一次机会 ifinclude(text2) //无返回内容 // 数组里是否含一个元素 const arry=["red","blue"] console.log(arry.includes("red")); //返回布尔 true console.log(arry.includes("green")); //返回布尔 false [字符串includes][1] [数组includes][2]

Nodejs获取本地时间Date()
type: item
date: 2023-07-26T23:26:00+08:00
description: console.log(Date()); //返回的是一个字符串，包括所有属性 //Wed Jul 26 2023 23:22:31 GMT+0800 (中国标准时间) //前面加个new，==>new Date() 返回一个表示当前日期和时间的日期对象。可以单独返回日期，星期.... console.log(new Date()); //2023-07-26T15:23:41.186Z //将他时间格式化就所有toLocaleString() console.log(new Date().toLocaleString()); // 2023/7/26 15:23:41 //返回年份.getFullYear() console.log(new Date().getFullYear());将时间戳转换为本地时间使用new Date(时间戳)const timestamp = 1690033752000; console.log(new Date(timestamp)); //2023-07-22T13:49:12.000Z console.log(new Date(timestamp).toLocaleString()); // 2023/7/22 21:49:12获取当前的时间戳使用getTime() console.log(new Date().getTime()); console.log(new Date(new Date().getTime())); // 1690392074150 // 2023-07-26T17:21:14.153Z多少时间前的时间轴一般为毫秒结尾那么3分钟前就可以这样找console.log('现在时间戳:'+new Date().getTime()); console.log('3分钟前时间戳:'+(new Date().getTime()-3*60*1000));//记住秒 * 1000（毫秒时间戳） // 这里+后面如果计算后需要使用()取值再返回给console.log ！括号来确保优先级 // 现在时间戳:1690393652833 // 3分钟前时间戳:1690393472836 更多教程Date()