javascript
javascript学习笔记(一)-廖雪峰教程
一. 基礎(chǔ)
1.for in,for of和forEach
遍歷的是對象的屬性,因?yàn)閿?shù)組也是對象,其內(nèi)部的元素的索引就是其屬性值。用該方式遍歷數(shù)組就是獲取了數(shù)組中的每一個(gè)元素的索引值(從0開始)。
而for of 則是直接遍歷集合中的元素值本身。map、set和array都屬于iterable類型的數(shù)據(jù)。都能夠用for of來遍歷:
此外,最好的方式是使用forEach,iterable類型的數(shù)據(jù)有內(nèi)置的方法forEach,該方法接收一個(gè)參數(shù)。每遍歷一個(gè)元素就調(diào)用該方法一次:
var a = ['A', 'B', 'C']; a.forEach(function (element, index, array) {// element: 指向當(dāng)前元素的值// index: 指向當(dāng)前索引// array: 指向Array對象本身alert(element); });以該種方式遍歷在map類型數(shù)據(jù)中,ele相應(yīng)值。index相應(yīng)鍵。
注意:forEach()方法是ES5.1標(biāo)準(zhǔn)引入的,你須要測試瀏覽器是否支持。
二. 函數(shù)
1.變量聲明提升
注意提升的是聲明。也就是說通過var 聲明的變量在運(yùn)行到聲明語句之前使用了該變量是不會報(bào)錯(cuò)的。可是此時(shí)無法獲取該變量的值。提升的時(shí)候并沒有把賦值也提升了,該值為undefined,直到運(yùn)行到該語句為這個(gè)變量賦值為止。
2.解決命名沖突的辦法
將變量和函數(shù)都放到一個(gè)命名空間中。實(shí)際上就是定義了一個(gè)空對象,全部的變量和方法都作為該對象的屬性和方法:
// 唯一的全局變量MYAPP: var MYAPP = {};// 其它變量: MYAPP.name = 'myapp'; MYAPP.version = 1.0;// 其它函數(shù): MYAPP.foo = function () {return 'foo'; };3.ES6引入了let用來聲明塊級作用域內(nèi)的變量,const來聲明常量.
4.apply的使用方法
除了改動(dòng)函數(shù)的作用域外(指定this值),還能夠改變已有函數(shù)的行為,即為已經(jīng)提供了的函數(shù)添加新的定義,比如統(tǒng)計(jì)調(diào)用了多少次parseInt:
var count = 0; var oldParseInt = parseInt; // 保存原函數(shù)window.parseInt = function () {count += 1;return oldParseInt.apply(null, arguments); // 調(diào)用原函數(shù),null表示當(dāng)做普通調(diào)用,不指定this值 };// 測試: parseInt('10'); parseInt('20'); parseInt('30'); count; // 35.Array.map(function(arg){})
對數(shù)組中每一個(gè)元素調(diào)用function方法,將結(jié)果作為新的數(shù)組返回。不會改變原來的數(shù)組。
參數(shù)構(gòu)成和forEach方法相似。
6.閉包
一個(gè)函數(shù)中包括了閉包,每次調(diào)用外部函數(shù),都會生成一個(gè)新的內(nèi)部函數(shù)。也就是說閉包在外部函數(shù)調(diào)用時(shí)都是新生成的。
返回閉包時(shí)牢記的一點(diǎn)就是:返回函數(shù)不要引用不論什么循環(huán)變量,或者興許會發(fā)生變化的變量。
假設(shè)一定要引用循環(huán)變量怎么辦?方法是再創(chuàng)建一個(gè)函數(shù),用該函數(shù)的參數(shù)綁定循環(huán)變量當(dāng)前的值,不管該循環(huán)變量興許怎樣更改。已綁定到函數(shù)參數(shù)的值不變:
例如以下代碼中。參數(shù)n綁定了每一個(gè)i(思考活動(dòng)對象中存儲的內(nèi)容包括了形參及其值,內(nèi)部閉包會沿著作用域鏈找到外部馬上運(yùn)行的匿名函數(shù)活動(dòng)對象中存儲的變量值):
function count(){var f_arr=[];for(var i=1;i<=3;i++){var rs=(function(n){return function(){return n*n;}})(i); //創(chuàng)建匿名函數(shù)并馬上運(yùn)行f_arr.push(rs);}return f_arr; }閉包能夠延遲運(yùn)行,或者提供了一個(gè)能夠訪問到函數(shù)私有變量的入口(閉包攜帶了狀態(tài))。
三. 標(biāo)準(zhǔn)對象
1.JSON
- 把一個(gè)JavaScript對象轉(zhuǎn)換成JSON對象:
replacer(key,value)能夠是數(shù)組,數(shù)組中的元素是轉(zhuǎn)換時(shí)要保留的JS對象的屬性。也能夠是一個(gè)函數(shù),該函數(shù)對JS對象中的鍵值做了某些處理后返回。spliter是轉(zhuǎn)換后的縮進(jìn)等切割。
比如:
function convert(key, value) {if (typeof value === 'string') {return value.toUpperCase();}return value; }var xiaoJson=JSON.stringify(xiaoming, convert, ' ');JSON對象反序列化為JS對象:
function addClassmate(key, value){if(key=="name"){return value+"同學(xué)";}return value; } var xiaoObj=JSON.parse(xiaoJson,addClassmate);2.Date對象
data對象中月份是從0開始的,也就是0表示一月。
轉(zhuǎn)載于:https://www.cnblogs.com/clnchanpin/p/7092515.html
總結(jié)
以上是生活随笔為你收集整理的javascript学习笔记(一)-廖雪峰教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《安卓开发必知的50个技巧》读书笔记
- 下一篇: mongoDB连接配置