1. 程式人生 > >JS筆記匯總

JS筆記匯總

多個 ajax tab 圖案 googl 布爾類型 emp 怎麽 運行

註釋必須要多寫! 1.方便後臺看 2.方便自己查錯和優化

事先先溝通約定好,比如交互的數據格式需求是怎麽樣的啊,功能模塊的邏輯是怎麽樣的等等。提前先和產品還有後臺溝通好。

 

JSON內不能包含註釋。 如果(某個)屬性需要引號,則必須使用雙引號。所有的屬性名必須在雙引號內。字符類型的屬性值必須使用雙引號。

eval(‘(‘ + jsonstr + ‘)‘); //可以將json字符串轉換成json對象後執行,註意需要在json字符外包裹一對小括號

代碼不運行,很可能是受其他代碼影響,通常改成異步抓取,然後加一個閉包就可以了!

異步抓取:如setTimeout定時器

調用

js函數的方式:

<div><a href="javascript:close();">×</a></div>

Sublime也可以編譯es6,並直接顯示js運行結果!

數據字典接口是用來查詢各種數據,比如單位,類型,等等的

如上圖,通過pid的方式實現樹形結構父子關系!!,同一個pid的屬於同一個父親

註意; 每次文件刪除或者增加都要重啟tomcat!!!!,文件內部的更改不用!

看不懂別人代碼的時候也可以用斷點調試! 因為不僅可以看到流程,還可以看到每個變量的數據!

a綁定事件無效,因為會跳轉,需要設置href=javascript:;

$.extend(object1, object2); /* object2 合並到 object1 中 */

在線babel編譯器:https://babeljs.io/repl

2e2表示2*10^2=200 即 2*102=200

Yslow 性能優化插件 很好用!

數值的前面帶 0 表示 八進制

Var num = 020;

0*80+2*81 = 16

數值的前面帶 0x 表示 十六進制

var result = 0xb; 11

因為16進制是:0-9 a b ...f

缺省即默認的意思

日期轉化:

$scope.begin_time = Date.parse($scope.begin_time)

new Date(1510838908000)

時間戳是指格林威治時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)起至現在的總毫秒數

//按照每個對象中的routeId屬性進行排序

routeList.sort(this.comp(‘a.routeId‘, ‘b.routeId‘));

comp = (a, b) => {

return new Function(‘a‘, ‘b‘, ‘return ‘ + a + ‘.localeCompare(‘ + b + ‘)‘);

};

表格布局:

父:Display:table 子:display:table-cell

5.56789.toFixed(2); 5.57

toFixed() 方法可把 Number 四舍五入為指定小數位數的數字。

Math.min(n1,n2,n3,...,nX)

min() 方法可返回指定的數字中帶有最小值的數字。

Set對象

ES6 提供了新的數據結構 Set。它類似於數組,但是成員的值都是唯一的,沒有重復的值。

const depotIdArray = Array.from(

new Set([...batSelection.map(item => item.DepotId)])

);

Array.from(object, mapFunction, thisValue)

import { Todo, TodoFilter } from "./";

var [, mumber4, ...others] =[1,2,3,4];

x=document.getElementsByName("myInput");

<input name="myInput" type="text"/>

xss攻擊 cross site scripting

Underscore 庫使用了解。模板輸出時-和=的 區別

instanceof返回的是一個布爾值,如:

var a = {};

alert(a instanceof Object); //true

instanceof只能用來判斷對象和函數,不能用來判斷字符串和數字等

add.call(sub,3,1); 這個例子中的意思就是用 add 來替換 sub,add.call(sub,3,1) == add(3,1) ,所以運行結果為:alert(4);

Var divs = Array.prototype.slice.call(divs) 偽數組轉為真數組

arguments.callee 返回函數體本身

arguments.caller 返回函數的調用者

navigator.userAgent 判斷是哪個瀏覽器

<input type=button value=後退+刷新

onclick="window.history.go(-1);window.location.reload()">

history.forward() 前進

history.back() 回退

delete product.buy

isFinite(number) 函數用於檢查其參數是否是無窮大/小。

如果 number 是有限數字(或可轉換為有限數字)那麽返回 true。否則,如果 number NaN(非數字),或者是正、負無窮大的數,則返回 false

架構師:宏觀規劃需要哪些對象,並且編寫好比較難寫的的對象

高級開發人員:實現對象

初級開發人員:使用對象

JS引擎:

chrome v8

webkit edge

ie 9- ie9-11 edge

console.log(myString.substr(-6,3));//Scr 表示從倒數第6個開始截取,截取3個字符

Call() 借用: 供爺法則 被借的就是爺,必須放在前面

/*eval 會將字符串當做js代碼執行*/

eval(‘var num=2‘)

console.log(num+2) /*結果是4*/

對於動態數據的綁定:

1.如果代碼簡單 就用 "++" 綁定變量

2.如果代碼稍復雜,就用formatString

3.如果比較復雜就用模板框架 如:arttemplate, underscore等。

模板就是合體法則:就是將數據和代碼進行綁定:把代碼裏面的坑用真實的數據填充 -所以:模板框架必須支持傳遞兩個參數:帶坑的html,真實的數據-

編程的思路極其重要,思路理清了,代碼很容易寫且不會出錯,思路沒清楚,越寫越亂,錯漏百出,所以

1.首先必須把思路寫下來,再三確認無誤,搞清晰再寫代碼!

2.並把思路按模塊寫在代碼註釋中,可以大大縮短寫代碼和debug時間!

對象字面量即JSON:javascript對象表示法

關閉瀏覽器或者縮小瀏覽器的時候,都有可能觸發析構函數 ,析構函數會回收內存

typeof null;//”object” 這是個公認的bug

變量存儲在棧中,因為變量中存儲的只是地址,真實的數據存儲在堆中。 當把該變量賦值給另一個變量的時候,只是賦給了地址,而非真實數據。

有時候頁面沒效果可能是網頁的緩存問題,清除下緩存,或者換個瀏覽器試試就知道了。

函數域解析比變量名提升優先級更高,即:函數會首先被提升,然後才是變量,也就是說函數會提升到變量上面

當對象的屬性名中間有空格,或者“-”時,要用引號 把 屬性名括起來

有時候"++" 不能輸出變量而是輸出字符串 而‘++‘卻可以,註意區別!

html出現中文亂碼的時候一般是meta標簽描述的內容格式和文件格式不同,需要在sublime的文件-設置中文編碼中選擇與之相對應的charset

console.log(p1.constructor) /*返回的是p1的構造函數本身 但是constructor 屬性易變,不可信賴

有些好的英文原著雖然看不怎麽懂,但是代碼也值得看,然後輔助google 翻譯 總會有所收獲的

計算機世界只認識0和1

JSONP只能做GET請求,原因是JSONP核心是script實現的,GET 請求 提交的數據有限

CORS: 被跨域的站點設置響應頭 Access-Control-Allow-Origin 就能用ajax實現跨域

元素都支持load事件!很好用

script.addEventListener(‘load‘, function() {

console.log(data);

});

XMLHttpRequest這個對象不支持跨域的請求 端口或域名不同都屬於跨域

Polyfill: 對於不支持的瀏覽器的兼容方式

外層包一個div快捷鍵:Ctr + shift + G

右鍵刷新按鈕可清空緩存

跨域的幾種常見的方式有:

jsonp

window.name+iframe

document.domain

postmessage

環境變量分為系統變量和用戶變量

系統變量指的是所用當前系統用戶共享的變量

- 自己的電腦一般只有一個用戶

- 建議將自己配置的環境變量放在用戶變量中,用戶變量比較幹凈

只要添加到PATH變量中的路徑,都可以在任何目錄下搜索

break只能用於for循環,while循環,switch case 等中,不能用於函數中

every 和 some 跟 forEach 一樣都可以遍歷數組

array.some( function(currentValue,index,arr),  thisValue)  返回布爾類型

程序調用自身的編程技巧稱為遞歸( recursion),遞歸是面試的重點! 還有斐波那契數列

手機訪問不了電腦的原因:

1. 不是同一個路由

2. 網段不同

3. 防火墻沒有設置

RegExpObject.exec(string)

str.match(patt1)

if (!/^\w[\w_\d]{5,15}$/.test($scope.username)) {

校驗參數合法化 簡單優先原則(界面邏輯)

window.addEventListener(‘hashchange‘,function(){ 監聽hash改變事件

什麽是閉包 一個具有封閉的對外不公開的空間, js中的閉包就是函數

1.閉包基本模式

在外部函數(foo)內創建函數(inner),在這個內部函數(inner)中,可以操作foo中的數據

將外部函數的返回值設置為內部函數

在外部調用外部函數(foo),就可以接受到返回值(內部函數)

使用這個內部函數,就可以在外部對外部函數裏的變量進行修改

線程:一個線程一次只能處理一件事情,多個線程就可以多個事情同時進行

JS是單線程的!

JS中,分了三個任務

1.渲染任務

2.js的代碼執行任務

3.事件處理任務

有輸入 有輸出的都可以稱之為API

Web API 主要是提供一些數據的,比如如下場景 :

天氣預報

導航

坐標轉城市名

IP轉城市名

提供webapi的網站: 聚合數據

案例: 百度地圖案例,豆瓣電影案例

用法如下

WebAPI: http://api.itcast.cn/students/?id=10 => json (student info)

API: Student.get(10) => student info

同樣是輸入10這個參數,然後輸出(返回)一個數據。

不管是學習還是調錯,看源碼首先著眼於整體,這樣便於理解,再深入去看細節。

壓縮會把空格,換行,註釋都去掉,如果選擇js標識符混淆(通常稱為js混淆

), 就會把局部作用域的變量名(包括參數)也簡化!

JS筆記匯總