Javascript 基础学习
前言
这篇文章记录学习js查到过的资料,因为经常记不住。(静不下心来导致的)
可恶不知道怎么分类,简单记录一下用到过的就算了,下次见到能想起来干啥用的就行。
归类以后再说
各种遇到的Web API和接口(对象类型)
可能会混进几个不是Web API或接口
document.querySelector()
文档对象模型Document引用的 querySelector() 方法返回文档中与指定选择器或选择器组匹配的第一个 Element对象。如果找不到匹配项,则返回null。
1 | <select name="" id="weather"> |
1 | const select = document.querySelector("select");//使用标签引用 |
当选择框改变时,会弹出hello world弹窗
Node.appendChild()
Node.appendChild() 方法将一个节点附加到指定父节点的子节点列表的末尾处。如果将被插入的节点已经存在于当前文档的文档树中,那么 appendChild() 只会将它从原先的位置移动到新的位置(不需要事先移除要移动的节点)。
1 | <button id="btn">点我开始倒计时</button> |
1 | const btn = document.querySelector("#btn"); |
运行结果会显示倒计时
(并非倒计时)
document.createElement()
createElement() 方法用于创建一个具有指定 localName 的 HTMLElement。
1 | var p = document.createElement("p"); |
创建一个新的段落元素 p,然后添加到body的最尾部
element.innerHTML
Element.innerHTML 属性设置或获取 HTML 语法表示的元素的后代。
如果要向一个元素中插入一段 HTML,而不是替换它的内容,那么请使用 insertAdjacentHTML() 方法。
1 | <button id="btn">点我替换下行文字</button> |
1 | const btn = document.querySelector("#btn"); |
点击图中按钮替换掉文字
MediaQueryList.addListener()
MediaQueryList接口的 addListener() 方法向MediaQueryListener添加一个侦听器,该侦听器将运行自定义回调函数以响应媒体查询状态的更改。
1 | <button id="btn">打招呼</button> |
1 | const btn = document.querySelector("#btn"); |
点击按钮时会弹出hello world。
Node.textContent
textContent 属性表示一个节点及其后代的文本内容。
其值是一个字符串或 null。
1 | <button id="btn">打招呼</button> |
1 | const btn = document.querySelector("#btn"); |
点击按钮时段落内容会改为hello world。
Element.setAttribute()
Element 接口的 setAttribute() 方法用于设置指定元素上的某个属性值。如果属性已经存在,则更新该值;否则,使用指定的名称和值添加一个新的属性。
要获取某个属性当前的值,请使用 getAttribute();要删除某个属性,请使用 removeAttribute()。
1 | <button>你好,世界</button> |
1 | const btn = document.querySelector("button"); |
点下“更改前面按钮属性”后,“你好,世界”按钮name属性将会更改,并且无法点击。
AbortController.abort()
中止一个尚未完成的异步操作。这能够中止 fetch 请求及任何响应体和流的使用。
(看不懂)
以下是利用abort()移除事件侦听器。
1 | <button>点击按钮改变颜色</button> |
1 | const controller = new AbortController(); |
该案例中只能使背景颜色改变一次,改变一次过后btn的事件侦听器会被abort()移除。
(需要构造一个AbortController对象实例,并且在事件侦听器加第三个参数{ signal: controller.signal })
Event.currentTarget
Event 接口的 currentTarget 只读属性用于标识事件处理器所附加的元素。
1 | <body> |
1 | const output = document.querySelector("#output"); |
上文中用到了e.currentTarget.tagName,会输出你所点击到的区域名。
Request()
fetch API中request接口的构造方法,Request()构造器创建一个新的Request对象。
1 | const request = new Request(URL); |
将一个URL构造为Request对象
Window:fetch()
Window接口的fetch()方法用于发起获取资源的请求,它会返回一个会在请求响应后兑现的promise。该promise会兑现一个表示请求响应的 Response对象。
1 | const response = await fetch(request); |
返回一个Promise,会兑现Response对象。
Window:setTimeout()
Window接口的setTimeout()方法设置一个定时器,一旦定时器到期,就会执行一个函数或指定的代码片段。
1 | window.setTimeout(() => { |
延迟
delay/1000秒后跳出弹框”hello world”。
location:reload()
Location 接口的 reload() 方法重载当前 URL,就像刷新按钮一样。
1 | document.location.reload(); |
重载当前页面。
Request.json()
Request接口的json()方法读取请求体并将其作为一个promise返回,该promise将兑现一个由响应体的文本解析得到的JSON。
1 | const obj = await response.json(); |
返回一个将兑现JavaScript对象的Promise。这个对象可能是任何可以用JSON表示的东西:一个对象、一个数组、一个字符串、一个数值……
XMLHttpRequest.status
只读属性 XMLHttpRequest.status 返回了 XMLHttpRequest 响应中的数字状态码。
1 | fetch(URL) |
返回数字状态码(一个数字,例如200,404等)
Worker.postMessage()
postMessage()方法可以向worker发送消息。第一个参数是要发送到worker的数据。(该数据可以是任何可以被结构化克隆算法处理JavaScript对象)
1 | //main.js部分 |
main.js中加载名为generate.js的worker脚本,利用postMessage()函数向worker传递信息。worker脚本通过事件侦听器收到message后执行generatePrimes()函数。(generatePrimes函数未在这里给出)
Event: preventDefault()
Event 接口的 preventDefault() 方法,告诉用户代理:此事件被显式处理,它默认的动作(例如页面滚动、链接跳转或粘贴文本)不应该照常执行.
1 | <h1>My shopping list</h1> |
1 | const input = document.querySelector(`#item`); |
这是一个简易的购物清单,而在这个例子里 button 元素被包裹在表单里,当用户点击这个按钮时,首先浏览器捕获到 click 事件,然后成功创建了 li、button、span元素,并把输入框的内容添加到了 ul 列表中。但是在最后一步里,表单中的button元素默认是 submit 类型,浏览器会执行默认行为:提交表单,而提交表单后会导致页面瞬间刷新,然后之前的操作就完全作废了。因此需要加上 event.preventDefault() 这行代码,阻止浏览器的默认提交行为。
或者换一种解决方法,在 html 中将 button 元素移出 form 表单,就可以不加 event.preventDefault()。
JavaScript内置标准对象
String.toLowerCase()
toLowerCase() 方法将该字符串转换为小写形式。
1 | const sentence = "The quick brown fox jumps over the lazy dog."; |
输出结果: “the quick brown fox jumps over the lazy dog.”
String.replace()
将源字符串替换为目标字符串,并返回新形成的字符串
1 | const myText = "我是博主"; |
输出“我是Elyrene”
Array.join()
join() 方法将一个数组(或一个类数组对象)的所有元素连接成一个字符串并返回这个字符串,用逗号或指定的分隔符字符串分隔。如果数组只有一个元素,那么将返回该元素而不使用分隔符。
1 | const myArray = ["我", "爱", "巧克力", "青蛙"]; |
输出“我 爱 巧克力 青蛙”
Math.random()
Math.random() 静态方法返回一个大于等于 0 且小于 1 的伪随机浮点数,并在该范围内近似均匀分布,然后你可以缩放到所需的范围。其实现将选择随机数生成算法的初始种子;它不能由用户选择或重置。
1 | function getRandomInt(max) { |
随机数生成函数
String.prototype.split()
split() 方法接受一个模式,通过搜索模式将字符串分割成一个有序的子串列表,将这些子串放入一个数组,并返回该数组。
1 | const str = "The quick brown fox jumps over the lazy dog."; |
上面输出: “fox”
下面输出:”k”
JSON.parse()
静态方法JSON.parse()用来解析JSON字符串,构造由字符串描述的JavaScript值或对象。可以提供一个可选的reviver函数,用于在返回结果对象之前对其进行转换。
1 | const json = '{"result":true, "count":42}'; |
输出42和true
Array.prototype.push()
push() 方法将指定的元素添加到数组的末尾,并返回新的数组长度。
1 | const animals = ["pigs", "goats", "sheep"]; |
输出结果已在代码中
Promise.all()
Promise.all()静态方法接受一个Promise可迭代对象作为输入,并返回一个Promise。如果输入的任何 Promise被拒绝,则返回的Promise将被拒绝,并带有第一个被拒绝的原因。
1 | const fetchPromise1 = fetch( |
任何一个fetch()失败,则返回Error。
Promise.any()
Promise.any()静态方法将一个Promise可迭代对象作为输入,并返回一个Promise。当输入的任何一个Promise兑现时,这个返回的Promise将会兑现,并返回第一个兑现的值。
1 | const fetchPromise1 = fetch( |
任何一个fetch()成功,则Promise兑现。
了解npm包管理器
初始化npm包
运行以下代码初始化npm包,这将会创建一个package.json文件
1 | npm init |
接下来会在终端显示一些问题
- name: 用于标识应用的名称。默认为文件项目文件夹的名字。
- version: 应用的起始版本号。按下 Enter 接受默认值即可。
- description: 应用的简要描述。
- entry point: 应用的入口 JavaScript 文件。
- test command: 暂时留空,按下 Enter 就行。
- git repository: 暂时留空,按下 Enter 就行。
- keywords: 暂时留空,按下 Enter 就行。
- author: 填入作者名称。
- license: 软件包的许可证。按下 Return 来接受默认值即可。
然后项目文件夹内会出现一个 package.json 文件,这样就算初始化完成了
1 | npm init --force |
或者直接使用 –force 参数直接创建一个默认的 package.json 文件,不会询问问题
安装工具包
运行以下代码安装工具包,这里安装 Parcel 作为演示
1 | npm install parcel-bundler |
可能会出现以下输出
1 | To address issues that do not require attention, run: |
可以尝试运行 npm audit fix 修复一些依赖包的安全漏洞
…好吧这个看起来 v1 大版本已经停止维护了,需要安装 v2 大版本,现在重新下载新的版本。删除命令请看”卸载工具包”
这其中有 –save-dev 参数指定其为开发依赖,也就是只在开发过程中使用,项目打包时不会将其打包进去
1 | npm install --save-dev parcel |
试运行Parcel工具包
可以使用以下命令启动服务
1 | # 启动开发服务器(假设入口文件是 index.html) |
如果当前项目是一个网站或Web应用(而非一个供他人使用的JS库),那么终端会报错,需要进入到 package.json 中移除 main 字段:
"main": "main.js",将这一行进行删除,然后就可以再次尝试运行上面的命令
在 main.js 文件中加入以下代码 (需要下载date-fns依赖)
1 | import { formatDistanceToNow } from "date-fns"; |
同时还要将 index.html 中的引用语句添加 type=”module” 属性
1 | <script type="module" src="url"> |
进入 localhost:”port” (“port”改成自己运行服务的端口) ,控制台将会输出 main.js 代码中的 ‘date’ 时间距离现在有多久
添加脚本
可以在 package.json 脚本中加入以下内容
1 | { |
这样就可以使用以下命令启动服务
1 | npm run dev |
卸载工具包
运行以下代码卸载工具包
1 | npn uninstall [package] |
将 [package] 改为要删除的包名称
其他常用命令
更新依赖
运行以下代码更新依赖
1 | npm update |
漏洞审查
运行一下代码进行漏洞审查
1 | npm audit |
检查一个依赖
以防会出现下载不同版本的依赖,可能会导致冲突,需要自己手动检查
1 | npm ls date-fns |
本篇流水账持已结束更新
