前言
闲来无事,简单总结学习中遇到的与js相关的知识,因为暂时用的不多,记的比较随意
js基础
引用方法
- 标签引用
1 2 3
| <script> alert("Hello,World!"); </script>
|
- 文件引用
1
| <script defer="defer" src="https://www.yuketang.cn/static/lesson/html/sentry.js"></script>
|
常用的js宿主对象
JavaScript 的宿主对象是指在 JavaScript 运行环境中提供的对象,这些对象通常不是由 JavaScript 语言本身定义的,而是由宿主环境(如浏览器、Node.js等)提供的。宿主对象提供了与外部环境的交互能力,例如访问文档、控制网络请求等。
浏览器对象
window对象
1 2 3 4 5 6 7 8 9 10 11
| window.close() window.open('链接地址')
window.alert("sometext") window.confirm("sometext") window.prompt("sometext","defaultText");
window.setTimeout(function, milliseconds); window.setInterval(function, milliseconds);
|
Navigator对象
1
| var ua = navigator.userAgent;
|
Location对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| location属性 { "href": "http://127.0.0.1:5500/jstext.html?1=1", "origin": "http://127.0.0.1:5500", "protocol": "http:", "host": "127.0.0.1:5500", "hostname": "127.0.0.1", "port": "5500", "pathname": "/jstext.html", "search": "?1=1", }
方法 location.assign("https://www.baidu.com"); location.reload(true); location.replace("https://www.baidu.com");
|
History对象
1 2
| history.back(); history.forward();
|
consolo对象
1 2 3 4 5 6
| <script> console.log("输出一条日志"); console.info("输出一条信息"); console.warn("输出一条警告"); console.error("输出一条错误"); </script>
|
Document对象
- 查找元素节点
1 2 3 4 5 6 7 8
| <button id="btn">我是按钮</button> document.getElementById("btn");
<button class="btn" href="">我是按钮</button> document.getElementsByTagName("button"); document.getElementsByClassName("btn"); document.querySelector(".btn") document.querySelectorAll(CSS选择器)
|
- 查看改变元素
1 2 3 4 5 6 7 8
| var all_radio = document.getElementById("door_form").elements; if(all_radio[i].checked)
btn.innerText = "我是JavaScript的按钮"; box.innerHTML = "<h1>我是Box中的大标题</h1>"; a.href="https://www.baidu.com"; a.setAttribute("href", "https://www.baidu.com"); box.style.background = "green";
|
- 节点操作
1 2 3 4 5 6 7 8
| document.createElement(tagName) document.createTextNode="str" parent.appendChild(ele) parent.insertBefore(a,b) parent.removeChild(ele) ele.remove( ) parent.replaceChild(a,b) ele.cloneNode("true|false")
|
原生对象
javaScript 的原生对象是 JavaScript 语言本身定义的对象,它们提供了基本的功能和数据结构。原生对象不依赖于宿主环境(如浏览器或 Node.js),可以在任何 JavaScript 环境中使用
事件
在 JavaScript 中,事件是用户与网页交互时触发的动作
鼠标事件
1 2 3 4 5 6 7 8 9 10 11 12
| var textInput = document.getElementById("text");
textInput.onfocus = function () { this.style.background = "red";… function onblur()
//此外还有 //onclick 当单击鼠标时运行脚本。 //ondblclick 当双击鼠标时运行脚本。 //onscroll 当滚动元素的滚动条时运行脚本。
|
键盘事件
1 2 3 4 5 6 7 8 9 10 11 12 13
|
if (event.ctrlKey) { alert("The CTRL key was pressed!"); } else { alert("The CTRL key was NOT pressed!"); }
|
事件绑定
使用 addEventListener() 方法来绑定事件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| var form = document.getElementById('mkdir'); form.addEventListener('submit', function(e) { e.preventDefault();
var formData = new FormData(form);
var xhr = new XMLHttpRequest(); xhr.open('POST', 'mkdir.php'); xhr.send(formData);
xhr.onreadystatechange = function() { if (xhr.readyState === XMLHttpRequest.DONE) { if (xhr.status === 200) { alert('创建成功', 'info'); } else { alert(json['error'], 'danger'); } } }; });
|
与后端交互
ajax
AJAX 的核心是 XMLHttpRequest 对象。 所有现代浏览器都支持 XMLHttpRequest 对象。
XMLHttpRequest 对象用于幕后同服务器交换数据,这意味着可以更新网页的部分,而不需要重新加载整个页面。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| var ajax = new XMLHttpRequest();
ajax.open("get", "users.json"); ajax.open("GET","/try/ajax/demo_get.php?t=" + Math.random(),true);
ajax.open("POST","/try/ajax/demo_post2.php",true); ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded"); ajax.send("fname=Henry&lname=Ford");
ajax.send();
ajax.onreadystatechange = function () { if (ajax.readyState == 4 && ajax.status == 200) { console.log(ajax.responseText); } };
|
fetch
1 2 3 4 5 6 7 8 9
| sn(e, t) { e && t && fetch("/check.php", { method: "POST", headers: { "Content-type": "application/x-www-form-urlencoded; charset=UTF-8" }, body: "score=" + parseInt(e).toString() + "&checkCode=" + md5(parseInt(e).toString() + t) + "&tm=" + (+new Date).toString().substring(0, 10) }).then(e => e.text()).then(e => alert(e)) }
|
async/await
async是一个加在函数前的修饰符,被async定义的函数会默认返回一个Promise对象resolve的值。因此对async函数可以直接then,返回值就是then方法传入的函数。
await 也是一个修饰符,只能放在async定义的函数内。可以理解为等待。
await 修饰的如果是Promise对象:可以获取Promise中返回的内容(resolve或reject的参数),且取到值后语句才会往下执行;
如果不是Promise对象:把这个非promise的东西当做await表达式的结果
RxJS (Javascript 的响应式扩展)
1 2 3 4
| o.http.post("/api/logout", null).subscribe((function () { o.token = null, o.router.navigate(["/login"]).then((function () { n && o.messageService.success("退出登录") }))
|
常见js加解密的实现
AES
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| const CryptoJS = require('C:\\Users\\DELL\\node_modules\\crypto-js'); var AES_CBC = { _KEY: "20171109124536982017110912453698", _IV: "2017110912453698", Encrypt: function (str) { var key = CryptoJS.enc.Utf8.parse(this._KEY); var iv = CryptoJS.enc.Utf8.parse(this._IV); var text = CryptoJS.enc.Utf8.parse(str); var encrypted = CryptoJS.AES.encrypt(text, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); return encrypted.ciphertext.toString(CryptoJS.enc.Hex); },
Decrypt: function (cipherHex) { var key = CryptoJS.enc.Utf8.parse(this._KEY); var iv = CryptoJS.enc.Utf8.parse(this._IV); var cipherParams = { ciphertext: CryptoJS.enc.Hex.parse(cipherHex) }; var decrypted = CryptoJS.AES.decrypt(cipherParams, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
return decrypted.toString(CryptoJS.enc.Utf8); } };
var c = AES_CBC.Encrypt("Hello CBC!"); console.log("CBC 密文:", c); console.log("CBC 解密:", AES_CBC.Decrypt(c));
|
JQuery框架
jQuery 库可以通过一行简单的标记被添加到网页中
<script language="javascript" type="text/javascript" src="https://www.leavesongs.com/content/templates/K-BLUE1.2/js/jquery-1.8.3.min.js"></script>
jQuery 入口函数:
1 2 3 4 5 6 7
| $(document).ready(function(){ });
$(function(){ });
|
基础语法: $(selector).action()
jQuery 选择器
元素选择器 $("p:first")
#id 选择器 $("#test")
.class 选择器 $(".test")
属性选择器$("[name='user']")
jQuery AJAX
jQuery 的 $.ajax 本质上就是对原生 XMLHttpRequest(XHR)封装的一层高级 API
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| $.ajax({ url: 'delete.php', type: 'POST', data: data, dataType: 'json', contentType: "application/json;charset=UTF-8", success: function (json) { if (json['success']) { toast('删除成功', 'info'); } else { toast(json['error'], 'danger'); } setTimeout(function () {location.reload();}, 1000); } });
$.post("demo.html",{suggest:txt},function(result){ $("span").html(result); }); $.get("/try/1.php",function(data,status){ alert("数据: " + data + "\n状态: " + status); });
$.ajaxPrefilter(function(options, originalOptions, jqXHR) { options.headers = { token: "xxxxx" }; });
|