快速排序
todo!()
todo!()
function parseQueryString(url) { const queryString = url.split('?')[1]; if (!queryString) return {}; return queryString.split('&').reduce((acc, curr) => { const [key, value] = curr.split('='); acc[decodeURIComponent(key)] = decodeURIComponent(value); return acc; }, {}); }
在 Vite 配置文件中,可以通过配置 esbuild 来移除生产环境下的所有 console 打印。 // vite.config.js import { defineConfig } from 'vite' import { fileURLToPath, URL } from 'node:url' import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import vueDevTools from 'vite-plugin-vue-devtools' // https://vite.dev/config/ export default defineConfig(({ mode }) => { return { plugins: [vue(), vueDevTools()], resolve: { alias: { '@': fileURLToPath(new URL('./src', import.meta.url)), }, }, esbuild: { drop: mode === 'production' ? ['console'] : [], // 在生产环境下移除 console 打印 }, } }) 参考 How to remove console.log ,when vite build use esbuild?
在 TypeScript 中,对象类型定义是通过接口(interface)来实现的。它们允许你定义一个对象的形状,包括属性和方法。 下面是一些基本的示例: interface Animal { species: string; age: number; makeSound: () => void; } const dog: Animal = { species: "Dog", age: 5, makeSound() { console.log("Woof!"); } }; 使用 interface 定义可选属性和只读属性: interface Car { make: string; model: string; year?: number; // 可选属性 readonly vin: string; // 只读属性 } const car: Car = { make: "Toyota", model: "Corolla", vin: "1HGCM82633A123456" }; 使用 interface 定义任意属性: interface User { id: number; name: string; [key: string]: any; // 任意属性 } const user: User = { id: 1, name: "Alice", age: 30, isAdmin: true }; 需要注意的是,一旦定义了任意属性,那么确定属性和可选属性的类型都必须是它的类型的子集: interface User { id: number; name: string; [key: string]: string; } const user: User = { id: 1, name: "Alice", age: 30, isAdmin: true }; // Property 'id' of type 'number' is not assignable to 'string' index type 'string'. // Type 'number' is not assignable to type 'string'. // Type 'boolean' is not assignable to type 'string'. 上面的例子任意属性的类型为 string,但是 id 的类型为 number,这会导致类型不匹配的错误。 ...
JavaScript 中的有两种数据类型,分别为原始数据类型和对象数据类型。 原始数据类型包括: 布尔值、数值、字符串、null、undefined 以及 ES6 中的新类型 Symbol 和 ES10 中的新类型 BigInt。 布尔值 在 TypeScript 中,使用 boolean 定义布尔值类型: let isDone: boolean = false; 但是如果调用构造函数来创建布尔值,则会得到一个对象,而不是布尔值: let isDone: Boolean = new Boolean(1); console.log(typeof isDone); // "object" 直接调用 Boolean 函数也会得到一个布尔值: let isDone: boolean = Boolean(1); console.log(typeof isDone); // "boolean" 数值 使用 number 定义数值类型: let decLiteral: number = 6; let hexLiteral: number = 0xf00d; // ES6 中的二进制表示法 let binaryLiteral: number = 0b1010; // ES6 中的八进制表示法 let octalLiteral: number = 0o744; let notANumber: number = NaN; let infinityNumber: number = Infinity; 编译结果: let decLiteral = 6; let hexLiteral = 0xf00d; // ES6 中的二进制表示法 let binaryLiteral = 0b1010; // ES6 中的八进制表示法 let octalLiteral = 0o744; let notANumber = NaN; let infinityNumber = Infinity; 字符串 使用 string 定义字符串类型: let myName: string = 'Tom'; let myAge: number = 25; // 模板字符串 let sentence: string = `Hello, my name is ${myName}. I'll be ${myAge + 1} years old next month.`; console.log(sentence); 编译结果: ...
单词 日语 对应 音调 中文 これ これ – 这个 ほん 本 1 书 かばん 鞄 0 包 バッグ バッグ 0 包 ノート note 1 笔记本/笔记本电脑 えんぴつ 鉛筆 0 铅笔 ペン pen 1 笔 かさ 傘 0 伞 くつ 靴 2 鞋 くつした 靴下 0 袜子 しんぶん 新聞 0 报纸 ニュース news 1 新闻 ざっし 雑誌 0 杂志 じしょ 辞書 1 字典 カメラ camera 1 相机 カメラメン camera man 1 摄影师 テレビ television 1 电视 パソコン computer 0 电脑 コンピュター computer 0 电脑 ラジオ radio 1 收音机 でんわ 電話 0 电话 ケータイ cell phone 0 手机 つくえ 机 0 桌子 テーブル table 0 桌子 いす 椅子 0 椅子 かぎ 鍵 2 钥匙 とけい 時計 0 钟表 うでどけい 腕時計 0 手表 てちょう 手帳 0 记事本 しゃしん 写真 0 照片 くるま 車 0 车 じどうしや 自動車 0 汽车 じてんしゃ 自転車 0 自行车 おみやげ お土産 0 特产 めいさんひん 名産品 0 名产 シルク silk 1 丝绸 ハンカチ handkerchief 0 手帕 かいしゃ 会社 0 公司 かた 方 2 人(敬语) ひと 人 0 人 かぞく 家族 1 家人 はは 母 1 妈妈(对别人称呼自己母亲的时候用) おかあさん お母さん 0 妈妈(敬语) にほんご 日本語 0 日语 ちゅうごくご 中国語 0 中文 ながしま 長島 0 长岛 スワトウ 汕头 2 汕头 ロンドン ロンドン 1 伦敦 とうきょう 東京 0 东京 代词 日语 距离 音调 中文 后接 これ 近 – 这个 不接名词 それ 中 – 那个 不接名词 あれ 远 – 那个 不接名词 どれ – – 哪个 不接名词 だれ – 1 谁 - なん – – 什么 - なに(口语) – – 什么 - どなた – 1 哪位(敬语) - この 近 0 这个 名词 その 中 0 那个 名词 あの 远 0 那个 名词 どの – 1 哪个 名词 日常用语 日语 中文 ありがとう 谢谢 ありがとうございます 谢谢(敬语) すみません 对不起/劳驾 おいくつ 您多大了 いくつ 几岁/多少 いくら 多少钱 どうぞ 请/请用 どうも ありがとうございます 非常感谢 语法 これ\それ\あれは~です 用法: 事物代词,不能接名词,表示“这个/那个/那个是……”的意思。 ...
事件循环 浏览器中 JavaScript 的执行流程和 Node.js 中的流程都是基于 事件循环 的。 事件循环的核心是一个无限循环,它不断地检查队列中的任务,并将它们依次执行。 如果队列中有任务,事件循环就会从队列中取出一个任务并执行它,然后继续检查队列中的下一个任务。 如果队列为空,事件循环就会等待新的任务到来。 任务示例: 当外部脚本 <script src="..."> 加载完成时,任务就是执行它。 当用户移动鼠标时,任务就是派生出 mousemove 事件和执行处理程序。 当安排的(scheduled)setTimeout 时间到达时,任务就是执行其回调。 设置任务 —— 引擎处理它们 —— 然后等待更多任务(即休眠,几乎不消耗 CPU 资源)。 一个任务到来时,引擎可能正处于繁忙状态,那么这个任务就会被排入队列。 多个任务组成了一个队列,即所谓的“宏任务队列”(v8 术语): 例如,当引擎正在忙于执行一段 script 时,用户可能会移动鼠标而产生 mousemove 事件,setTimeout 或许也刚好到期,以及其他任务,这些任务组成了一个队列,如上图所示。 队列中的任务基于“先进先出”的原则执行。当浏览器引擎执行完 script 后,它会处理 mousemove 事件,然后处理 setTimeout 处理程序,依此类推。 两个细节: 引擎执行任务时永远不会进行渲染(render)。如果任务执行需要很长一段时间也没关系。仅在任务完成后才会绘制对 DOM 的更改。 如果一项任务执行花费的时间过长,浏览器将无法执行其他任务,例如处理用户事件。因此,在一定时间后,浏览器会抛出一个如“页面未响应”之类的警报,建议你终止这个任务。这种情况常发生在有大量复杂的计算或导致死循环的程序错误时。 示例 1 假设我们有一个 CPU 过载任务。 例如,语法高亮(用来给本页面中的示例代码着色)是相当耗费 CPU 资源的任务。为了高亮显示代码,它执行分析,创建很多着了色的元素,然后将它们添加到文档中 —— 对于文本量大的文档来说,需要耗费很长时间。 当引擎忙于语法高亮时,它就无法处理其他 DOM 相关的工作,例如处理用户事件等。它甚至可能会导致浏览器“中断(hiccup)”甚至“挂起(hang)”一段时间,这是不可接受的。 我们可以通过将大任务拆分成多个小任务来避免这个问题。高亮显示前 100 行,然后使用 setTimeout(延时参数为 0)来安排(schedule)后 100 行的高亮显示,依此类推。 ...
todo
offsetParent,offsetLeft/Top offsetParent 是最接近的祖先(ancestor),在浏览器渲染期间,它被用于计算坐标。 最近的祖先为下列之一 CSS 定位的(position 为 absolute、relative、fixed 或 sticky) <td>、<th>、<table> 元素 <body> 元素 属性 offsetLeft/offsetTop 提供相对于 offsetParent 左上角的 x/y 坐标。 例子 <main style="position: relative" id="main"> <article> <div id="example" style="position: absolute; left: 180px; top: 180px">...</div> </article> </main> <script> alert(example.offsetParent.id); // main alert(example.offsetLeft); // 180(注意:这是一个数字,不是字符串 "180px") alert(example.offsetTop); // 180 </script> 有以下几种情况下,offsetParent 的值为 null: 元素的 display 属性为 none 元素的 position 属性为 fixed 元素的为 <html> 或 <body> 元素 offsetWidth/Height (常用) offsetWidth 和 offsetHeight 属性提供元素的尺寸(包括边框和内边距)。 ...
语法 肯定句 名词/代词+は+名词+です です:表示肯定的判断助动词 は:没有实质意思 否定句 名词/代词+は+名词+ではありません/じゃありません (敬体)では =(简体)じゃ (敬体)ありません =(简体)ない 疑问句 名词/代词+は+名词+ですか? 在疑问句当中最后一个力必须要浊化尽管他不是浊音。 の -> 的 の:表示所属关系 人称 第一人称 代词 说明 わたし 我 おれ(俺) 男性用語 ぼく(僕) 男性用語 あたし(私) 女性用語 第二人称 代词 说明 あなた(貴方) 你(亲密,一般用于妻子对丈夫) きみ(君) 男性用語 おまえ(お前) てまえ(手前) 不文雅的说法 第三人称 代词 说明 かれ(彼) 他 かのじょ(彼女) 她 称呼 称呼 说明 さん 不分年龄 くん(君) 熟悉的男性,同辈或者上级对下级 ちゃん 一般用于亲密的人之间