= == //等於(類型不一樣,值同樣,也會判斷爲true) === //絕對等於(類型同樣,值同樣,結果才爲true)
這是一個JS的缺陷,堅持不要使用 == 比較javascript
須知:css
儘可能避免使用浮點數進行運算,存在精度問題html
Math.abs(1/3-(1-2/3))<0.000000001
全局變量 i = 1;java
局部變量 var i = 1; let i = 1;(ES6建議使用let)python
嚴格檢查模式jquery
‘use strict'; 嚴格檢查模式,預防JavaScript的隨意性致使產生的一些問題ios
多行字符串:ajax
`XXX編程
XXX`json
模板字符串
`hello,${變量}`
str.length str[0] str.toUpperCase() str.toLowerCase()
str.subsring(X,Y)返回str[X,Y)
var arr = [1,2,3,4,5,'hello',null,true]; new Array(1,2,3,4,5,'hello',null,true);
取數組下標,若是越界(arr[8]),就會提示undifined
假如給數組的長度arr.length賦值,數組大小就會發生變化
indexOf:經過元素得到下標索引
slice()截取Array的一部分,相似字符串中的substring
arr.push(),arr.pop() // 尾部
arr.unshift(),shift() // 頭部
arr.sort()
arr.reverse()
arr.concat() // 不會改變原數組
arr.join('-') // 鏈接符 打印
arr.fill(X)
每一個屬性之間使用逗號隔開,最後一個不須要添加
var person = { name:"XXX", age:18, tags:['js','java','...'] }
對象賦值:person.name = "XXX"
取對象的值:person.name
使用一個不存在的對象屬性,不會報錯!undefined
動態刪除,添加對象的屬性:delete person.name person.XXX=XXX
JavaScript中全部鍵都是字符串,值是任意對象
判斷屬性值是否在這個對象中!'XXX' in XXX
判斷一個屬性是不是這個對象自身擁有的 hasOwnProperty()
arr.forEach(function (value){ // ES5.1 console.log(value) }) for(var i in arr){ // i爲數組下標 } for(var e of arr){ // e爲數組元素 }
ES6的新特性
var map = new Map([['tom',100],['jack',90]]); var name = map.get('tom'); map.set('admin',123); // 新增 map.delete('XXX'); console.log(name); var set = new Set(1,1,1,3); // 去重 set.add(x); set.delete(x); set.has(x);
iterater ES6新特性
function abs(x){ //定義方式一 //... } var abs = function(x){ //定義方式二 //... }
若是沒有執行return,函數執行完也會返回結果:undefined
JavaScript能夠傳任意參數,也能夠不傳參數
var abs = function(x){ //手動拋出異常 if(typeof x != 'number'){ throw 'Not a Number'; } if(x >= 0){ return x; }else{ return -x; } }
arguments
參數表示函數傳入的全部參數,是一個數組
rest
剩餘參數,只能寫在最後面,必須用...表示
function aaa(a,b,...rest){ consloe("a->"+a); consloe("b->"+b); consloe("rest->"+rest); }
全部全局變量都綁定在全局對象window上的
window.x(全局變量)
windows.alert(window.x)
var old_alert = window.alert; //old_alert(x); window.alert = function(){ }; window.alert(123); //失效 //恢復 window.alert = old_alert; window.alert(456);
全局變量→衝突
//惟一全局變量 var App = {}; //定義全局變量 App.name = 'XXX'; App.add = function (a,b) { return a + b; }
把本身代碼所有放入本身定義的惟一命名空間中,下降全局命名衝突的問題(JQuery)
ES6建議使用let
關鍵字去定義局部做用域的變量(解決局部做用域衝突的問題),使用const
定義常量const PI = '3.14'
var XXX = { name:'xxx', birth:2020, //方法 age:function(){ var now = new Date().getFullYear(); return now - this.birth; } } XXX.name XXX.age()
apply在js中能夠控制this指向,經過 apply() 方法,可以編寫用於不一樣對象的方法。函數.apply(對象,參數列表)
this指向apply的對象
標準對象
number, string, boolean, object
typeof NaN "number" typeof [] "object" typeof undefined "undefined"
var now = new Date(); now.getFullYear(); // 年 now.getMonth(); //月(0-11) now.getDate(); //日 now.getDay(); //星期幾 now.getHours(); //時 now.getMinutes(); //分 now.getSeconds(); //秒 now.getTime(); //時間戳 1970.1.1 00:00 - ms console.log(new Date(113224222)) //時間戳轉爲時間 //轉換爲字符串 now.toLocaleString() now.toGMTString()
JSON(JavaScript Object Notation, JS 對象表示法) 是一種輕量級的數據交換格式。
特色:簡潔,清晰的層次結構;易於人閱讀和編寫,同時也易於機器解析和生成,有效提高網絡傳輸效率
在JavaScript中一切皆對象,任何JS支持的類型均可以用JSON來表示
格式:
JSON字符串和JS對象的轉化
var user = { name: "XXX", age: 3, sex: '男' } //對象轉化爲JSON對象 var jsonUser = JSON.stringify() //json字符串轉化爲對象,參數爲json字符串 var obj = JSON.parse('{"name":"XXX","age":3,"sex":"男"}')
原型:子類(對象).__proto__ = 父類(原型對象); //子類的原型是父類
隨意指向
class
關鍵字是在ES6引入的
class Student{ constructor(name){ this.name = name; } hello(){ alert('hello') } } class pupil extends Student{ constructor(name,grade){ super(name); this.grade = grade; } myGrade(){ alert('我是一名小學生') } } var xiaoming = new Student("xiaoming"); var xiaohong = new Student("xiaohong"); xiaoming.hello();
原型鏈:__proto__
BOM(Browser Object Model) 是指瀏覽器對象模型,是用於描述這種對象與對象之間層次關係的模型,瀏覽器對象模型提供了獨立於內容的、能夠與瀏覽器窗口進行互動的對象結構。
瀏覽器:
內核:IE, Chrome, Safari, FireFox
三方:QQ,360
window表明瀏覽器窗口
window.alert(1) // 調整瀏覽器窗口大小 window.innerHeight window.innerWidth window.outerHeight window.innerWidth
navigator封裝了瀏覽器的信息
navigator.appName navigator.appVersion navigator.userAgent navigator.platform
通常不使用,由於會被人爲修改,不建議用這些屬性來判斷瀏覽器版本
screen表明屏幕尺寸
screen.width screen.height
location表明當前頁面的URL信息
host: "www.bilibili.com" hostname: "www.bilibili.com" href: "https://www.bilibili.com/video/BV1JJ41177di?p=19" protocol: "https:" reload: ƒ reload() // 刷新頁面 // 設置新的地址 location.assign('https://...')
document表明當前的頁面(document.),HTML DOM文檔樹
//獲取具體的文檔樹節點 <dl id="app"> <dt>Java</dt> <dd>JavaSE</dd> </dl> <script> var dl = document.getElementById('app'); </script>
獲取cookie
document.cookie "finger=158939783; _uuid=C56A5201-E5AB-30A7-6A3D-33573CFAEC4B75115infoc; buvid3=2DE4F72B-D52C-4628-B6F6-D25A79D4DFBD155818infoc; sid=jsr4r70q; im_notify_type_775959=0; LIVE_BUVID=AUTO6215819975268326; LIVE_PLAYER_TYPE=2; DedeUserID=775959; DedeUserID__ckMd5=5a93072db131a757; bili_jct=e4c30825e9523f0d624509aa21012a7e; rpdid=|(J~RllJRmlY0J'ulm)RkRm)l; blackside_state=1; CURRENT_FNVAL=80; bp_t_offset_775959=434460479141307658; Hm_lvt_8a6e55dbd2870f0f5bc9194cddf32a02=1600696828; CURRENT_QUALITY=80; bp_video_offset_775959=438421933640865406; finger=158939783; PVID=3"
劫持cookie原理
www.taobao.com
<script src="aa.js"></script> <!-- 惡意人員:獲取你的cookie上傳到他的服務器 -->
服務器能夠設置:httpOnly(安全)
history表明瀏覽器的歷史記錄(不建議使用)
history.back() history.forward()
文檔對象模型(Document Object Model,簡稱DOM),是W3C組織推薦的處理可擴展置標語言的標準編程接口。它是一種與平臺和語言無關的應用程序接口(API),它能夠動態地訪問程序和腳本,更新其內容、結構和www文檔的風格(目前,HTML和XML文檔是經過說明部分定義的)。
瀏覽器網頁就是一個DOM樹形結構,要操做一個DOM節點,就必須先得到這個DOM節點
標籤選擇器:document.getElementsByTagName('h1')
(返回數組)
id選擇器:documen.getElementById('id')
class選擇器:document.getElementByClassName('class')
(返回數組)
得到子節點:Node.children
修改文本值:
Node.innerText = 'xxx'
Node.innerHTML = 'xxx'
(超文本)
設置樣式:
Node.style.color/fontSize/... = 'xxx'
(駝峯命名)
先獲取父節點,再經過父節點刪除本身
Node.parentElement.removeChild(Node)
(只能經過id選擇器選擇節點刪除)
注意:刪除節點過程當中,父節點的children是動態變化的
得到的DOM節點若爲空節點,能夠經過innerText增長元素
追加節點:Node1.append(Node2)
建立新節點:document.createElement('p')
設置節點屬性:Node = setAttribute('屬性名','屬性值')
插入節點:Node.insertBefore(newItem,existingItem);
表單的目的:提交信息
得到要提交的信息
input_text.value boy_radio.checked //boolean
MD5加密密碼
表單綁定提交事件
onsubmit= 綁定一個提交檢測的函數,返回布爾值(return false:不提交表單)
公式:$(selector).action()
$('#id').click(function(){ //... }) //當網頁元素加載完畢以後,響應事件 $(document).ready(function(){ //... }) //↑簡寫,獲取座標 $(function(){ $('#divMove').mousemove(function(e){ $('mouseMove').text('x:'+e.pageX+'y:'+e.pageY) }) })
文檔工具站:https://jquery.cuishifeng.cn/
操做DOM:
$('#test-ul li[name=python]').css({"color","red"}) $('#test-ul li[name=python]').show()/hide() $(window).width
LayUI 彈窗組件
ElementUI 樣式好看