本文提供最簡便的解答方式,方便快速記憶,覆盤,詳細答案可本身再搜一下。
object,string,undefined,number,function,booleanjavascript
基本數據類型:
string,number,boolean,undefined,null
parseInt(),parseFloat(),Number()
==,!!php
var array = new Array() var array = []
Array.of(1,2) //[1,2]
這是es6新增的一個Array方法,建立一個具備可變數量參數的新數組實例,而不考慮參數的數量或類型。
(感謝 haru 的寶貴建議)html
dom0級前端
var btn = document.getElementById("button"); btn.onclick = function(){ alert(1); } btn.onclick = function(){ alert(2); } //只彈出2
dom2java
var btn = document.getElementById("button"); btn.addEventListener("click",function(){ alert("1"); }) btn.addEventListener("click",function(){ alert("2"); }) //先彈出1,再彈出2
var ev = ev||window.event document.documentElement.clientWidth||document.body.clientWidth var target = ev.srcElement||ev.target
改變this的指向,
其中call的寫法linux
function add(a,b) { alert(a+b); } function sub(a,b) { alert(a-b); } add.call(sub,3,1);
這個例子中的意思就是用 add 來替換 sub,add.call(sub,3,1) == add(3,1) ,因此運行結果爲:alert(4); // 注意:js 中的函數實際上是對象,函數名是對 Function 對象的引用。
apply寫法es6
function add(a,b) { alert(a+b); } function sub(a,b) { alert(a-b); } add.apply(sub,[4,2]);
不一樣就在於第二個參數,apply寫成數組web
bind寫法ajax
function add(a,b) { alert(a+b); } function sub(a,b) { alert(a-b); } add.bind(sub,4,2)();
bind是返回了一個改變上下文的一個函數,能夠稍後調用,而apply,call是當即執行函數數據庫
前者會自動轉換類型
後者不會
跨域是什麼:實際上就是一個網站不能執行其餘網站上的網址,是由瀏覽器同源策略形成的,是瀏覽器對js施加的安全限制
所謂同源,其實是指域名,協議,端口都相同
也就是說當,域名或者協議,或者端口不一樣的時候,就是跨域,
jsonp
json with padding,是一種json的一種使用模式
產生的緣由,ajax不支持跨域,因爲瀏覽器的同源策略,可是script的src支持跨域
主要的原理是動態建立一個script標籤的,經過src調用服務器提供的js腳本,該腳本的內容是一個函數調用,該函數在本地js文件中進行定義,其中的參數就是,本地函數請求的數據,也就是服務器所將返回的數據
與ajax的不一樣,ajax是經過xhr獲取非本頁面的數據內容,而jsonp獲取的是服務器提供js腳本
代理
PHP端修改header(XHR2方式)
在php接口腳本中加入如下兩句便可:
header('Access-Control-Allow-Origin:*');//容許全部來源訪問
header('Access-Control-Allow-Method:POST,GET');//容許訪問的方式
基本類型 undefind null number string boolean
引用類型 object Function Array
獲取值的時候原生不是方法,不帶括號
var boxs =document.getELementsByTagName("input"); var boxArray = []; var len = boxs.length; while(len--){ if(boxs[len].type == 'checkbox'){ boxArray.push(boxs[len]); } }
var dom = document.getElementById("ID"); dom.innerHTML = "xxxx" dom.style.color="#000"
javascript由ECMAScript,DOM,BOM三部分組成,
調用localStorage,cookies等本地存儲進行存儲相關信息
三者的共同點:都保存在瀏覽器。
三者的區別:
與服務器的交互
存儲大小限制也不一樣,
數據有效期不一樣,
做用域不一樣,
內存泄露指任何對象在再也不擁有或再也不須要它以後依然存在
經典閉包
function outer(){ var a = 1; function inner(){ alert(a); } return inner } var inn = outer(); inn();
點擊li返回li下標
<ul id="test"> <li>1</li> <li>2</li> <li>3</li> </ul> <script> var oUL = document.getElementById("test"); var oLi = oUl.getElementByTagName("li"); for(var i=0;i<oLi.length;i++){ oLi[i].index = i; oLi[i].onclick = function(){ alert(this.index); } } </script> <!-- 閉包 --> <script> var oUL = document.getElementById("test"); var oLi = oUl.getElementByTagName("li"); for(var i=0;i<oLi.length;i++){ oLi[i].index = i; oLi[i].onclick = (function(a){ return function(){ alert a; } })(i) } </script>
普通函數調用,指向windows
window.value=1; function getValue(){ console.log(this.value); } getValue();//輸出1,此時的this指向window
對象的方法調用,指向對象
var Obj={ value:2, getValue:function(){ console.log(this.value);//輸出2,this指向Obj } }
構造器方法調用,指向構造函數實例出來的對象
function main(val){ this.value=val; } main.prototype.getValue=function(){ console.log(this.value); } var fun=new main(3); fun.getValue(); fun.value;//輸出3,this指向main的實例對象fun
call,apply,bind能夠自定義this指向第一個參數
function showValue(){ console.log(this.value); } var obj={ value:4 } showValue.call(obj)//輸出4,this指向了obj對象
function showValue(){ console.log(this.value); } var obj={ value:4 } var showValue2=showValue.bind(obj); showValue2()//輸出4,this指向了obj對象
"use strict"
消除js一些不合理的用法
消除代碼運行的一些不安全之處
增長運行速度
爲將來新版本js作鋪墊
版本控制是一種記錄一個或若干文件內容變化,以便未來查閱修改以及更新。
ajax請求四步
xhr.onreadystatechange = function(){ if(xhr.readyState == 4){ console.log(responseText); } }
首先根據url中的域名,在遠程服務器中查詢對應
ajax用於web頁面中實現異步數據交互,實現頁面局部內容刷新
json是一種請求輕量級的數據交互格式
GET:
POST:
PUT:
DELETE:
請求報文包含三部分:
響應報文包含三部分:
https就是加上加密處理(通常是SSL安全通訊線路)+認證+完整性保護
經常使用:
利用indexOf方法的去重
indexOf() 方法可返回某個指定的字符串值在字符串中首次出現的位置。
var arr = [1,1,2,3,4,2,6,4,5,7]; var nArr = []; function removeItem(arr){ for(var i=0;i<arr.length;i++){ if(nArr.indexOf(arr[i])==-1){ nArr.push(arr[i]); } } return nArr; } console.log(removeItem(arr));
let const
class extends super
arrow function(箭頭函數)
除了書寫簡潔了不少,最大的優勢是this指向,使用箭頭函數,函數內部的this就是定義時所在的對象。箭頭函數根本沒有本身的this,this是繼承外面的,它內部的this就是外層代碼塊的this
template string(模板字符串)
ajax調用數據庫,須要向文檔中插入大段html的時候,傳統的字符串拼接太麻煩,引入模板工具庫會稍微好點,不過仍是沒有es6的template string簡單,能夠直接用反單引號包括代碼塊``,用${}來引用變量,全部的空格縮進都會保留到輸出中
destructuring(解構賦值)
es6按照必定模式,從數組和對象中提取值,對變量進行賦值,這就成爲解構,也就是說,運用es5的方法,數組和對象中的變量須要,一個個進行賦值,而es6能夠一步到位
default,rest(默認值,擴展語法)
當函數忘記傳參的時候,給它一個默認值,傳統方法是在函數中運用||,es6能夠直接在參數中寫上
function animal(type){ type = type || 'cat' console.log(type) } animal()
function animal(type = 'cat'){ console.log(type) } animal()
function animals(...types){ console.log(types) } animals('cat', 'dog', 'fish') //["cat", "dog", "fish"]
gulp是一種自動化構建工具,前端工程化開發的一種工具,加強開發流程
使用方便,npm安裝,新建gulpfile.js,導入gulp模塊,let gulp = require('gulp')
經過default任務去定義工做流
最後在終端執行gulp來進行自動化操做
api很簡單隻有四種
UI元素的不一樣
尺寸單位不同,
網格佈局有所不一樣
移動設備
社區