摘要:小明在一個(gè)方法內(nèi)部,是一個(gè)特殊變量,它始終指向當(dāng)前對(duì)象,也就是這個(gè)變量。原型對(duì)象基于原型創(chuàng)建一個(gè)新對(duì)象初始化新對(duì)象小明小明
數(shù)據(jù)類型
數(shù)字
字符串
布爾:false和true
數(shù)組
對(duì)象
null——空值
undefined——未定義。僅僅在判斷函數(shù)參數(shù)是否傳遞的情況下使用
用""或者""包括的叫字符串。
轉(zhuǎn)義字符:""
toUpperCase()——轉(zhuǎn)換為大寫
toLowerCase()——轉(zhuǎn)換為小寫
indexOf()——搜索指定字符串出現(xiàn)的位置,如果沒有找到返回-1
subString(start,end)——字符串截取,索引值不包含end
獲取數(shù)組長(zhǎng)度直接arr.length
通過(guò)索引修改值arr[2]=0;
indexOf()——搜索指定元素所在位置
slice(起始索引,結(jié)束索引)——截取元素,返回新的數(shù)組,包含起始索引,但是不包含結(jié)束索引,類似數(shù)學(xué)中[start,end)
push()——向數(shù)組末尾添加新元素
unshift()——想數(shù)組頭部添加新元素
pop()——?jiǎng)h除數(shù)組末尾的元素
shift()——?jiǎng)h除數(shù)組頭部的元素
sort()——數(shù)組排序
reverse()——數(shù)組反向
concat()——數(shù)組合并,返回新數(shù)組
join()——數(shù)組轉(zhuǎn)換為字符串
splice(start,num,newElement)——數(shù)組修改萬(wàn)能方法。
var arr = ["Microsoft", "Apple", "Yahoo", "AOL", "Excite", "Oracle"]; //從索引2開始刪除3個(gè)元素,然后再添加兩個(gè)元素: arr.splice(2, 3, "Google", "Facebook"); //刪除的元素 ["Yahoo", "AOL", "Excite"] arr; //["Microsoft", "Apple", "Google", "Facebook", "Oracle"]對(duì)象
對(duì)象我粗暴的理解就是鍵值對(duì)。
var person={ name:"小明", age:18, sex:"男", "middle-school":"NO.1 middle school" }
訪問(wèn)屬性使用.,例如person.name或者person["name"],屬性命名含有特殊字符的必須使用后一種方式,即person["middle-school"]
判斷對(duì)象中某一個(gè)屬性是否存在使用in或者hasOwnProperty(),前者判斷的屬性不一定是對(duì)象私有也可能是繼承的,后者可以判斷對(duì)象是否擁有該屬性。
//in "name" in person //true "height" in person //false //hasOwnProperty() person.hasOwnProperty("name") //true person.hasOwnProperty("height") //false
對(duì)象的屬性都是字符串,屬性值什么類型都有。
遍歷對(duì)象屬性和屬性值
var per={ name:"zch", age:18, "height-h":178 } var x=per.hasOwnProperty("name"); for(item in per){ console.log(per[item]) }函數(shù)
函數(shù)定義
(1)函數(shù)聲明
function abc(x){ if(x>0){ return x; }else{ return -x; } } //*函數(shù)內(nèi)部執(zhí)行到return時(shí)語(yǔ)句會(huì)停止
(2)函數(shù)表達(dá)式
var abs=function(x){ return x > 0 ? x : -x; };
(1)和(2)在定義上完全等價(jià),但是使用上要注意,函數(shù)聲明方式可以先調(diào)用后定義,也就是函數(shù)提升,表達(dá)式定義則不行,另外方式(2)本質(zhì)上是一個(gè)賦值語(yǔ)句,因此在末尾要加;
變量
如果一個(gè)變量在函數(shù)體內(nèi)部申明,則該變量的作用域?yàn)檎麄€(gè)函數(shù)體,在函數(shù)體外不可引用該變量
如果兩個(gè)不同的函數(shù)各自申明了同一個(gè)變量,那么該變量只在各自的函數(shù)體內(nèi)起作用。換句話說(shuō),不同函數(shù)內(nèi)部的同名變量互相獨(dú)立,互不影響
由于JavaScript的函數(shù)可以嵌套,此時(shí),內(nèi)部函數(shù)可以訪問(wèn)外部函數(shù)定義的變量,反過(guò)來(lái)則不行
JavaScript的函數(shù)在查找變量時(shí)從自身函數(shù)定義開始,從“內(nèi)”向“外”查找。如果內(nèi)部函數(shù)定義了與外部函數(shù)重名的變量,則內(nèi)部函數(shù)的變量將“屏蔽”外部函數(shù)的變量
變量也可以提升,不過(guò)不能提升值
由于JavaScript的變量作用域?qū)嶋H上是函數(shù)內(nèi)部,我們?cè)趂or循環(huán)等語(yǔ)句塊中是無(wú)法定義具有局部作用域的變量的,也就是說(shuō)for循環(huán)中的i或者j在函數(shù)內(nèi)部都可以訪問(wèn)到。
方法
在一個(gè)對(duì)象中綁定函數(shù),稱為這個(gè)對(duì)象的方法。
"use strict"; var xiaoming = { name: "小明", birth: 1990, age: function () { function getAgeFromBirth() { var y = new Date().getFullYear(); return y - this.birth; } return getAgeFromBirth(); } }; xiaoming.age(); //在一個(gè)方法內(nèi)部,this是一個(gè)特殊變量,它始終指向當(dāng)前對(duì)象,也就是xiaoming這個(gè)變量。所以,this.birth可以拿到xiaoming的birth屬性。 //針對(duì)函數(shù)內(nèi)再套函數(shù)的問(wèn)題,因?yàn)閠his指向發(fā)生了變化,可以使用that首先捕獲this,在進(jìn)行傳值
高階函數(shù)
高階函數(shù)就是函數(shù)的參數(shù)是一個(gè)函數(shù)
function add(x, y, f) { return f(x) + f(y); } add(-5,9,Math.abs)// Math.abs(-5) + Math.abs(6)==>5+6=11
高階函數(shù)——map()
//jquery map() 返回一個(gè)jquery對(duì)象
//js原生map()返回一個(gè)數(shù)組
var x=$("input").map(function(){ return $(this).val(); }) //返回{ 0: "氣球", 1: "是否", 2: "水電費(fèi)剎車發(fā)生"} console.log(x)//返回objct //get()是jq DOM操作方法,目標(biāo)對(duì)象是獲取的DOM元素,返回?cái)?shù)組。 //結(jié)果[ "氣球", "是否", "水電費(fèi)剎車發(fā)生" ] console.log(x.get())
在實(shí)際使用的時(shí)候,我們可以利用map方法方便獲得對(duì)象數(shù)組中的特定屬性值們,如下:
var users = [ {name: "張含韻", "email": "zhang@email.com"}, {name: "江一燕", "email": "jiang@email.com"}, {name: "李小璐", "email": "li@email.com"} ]; var emails = users.map(function (user) { return user.email; }); console.log(emails.join(", ")); // zhang@email.com, jiang@email.com, li@email.com
由map方法引發(fā)的一個(gè)js題目:
["1", "2", "3"].map(parseInt); // 你可能覺的會(huì)是[1, 2, 3] // 但實(shí)際的結(jié)果是 [1, NaN, NaN] // 通常使用parseInt時(shí),只需要傳遞一個(gè)參數(shù).但實(shí)際上,parseInt可以有兩個(gè)參數(shù).第二個(gè)參數(shù)是進(jìn)制數(shù).可以通過(guò)語(yǔ)句"alert(parseInt.length)===2"來(lái)驗(yàn)證. // map方法在調(diào)用callback函數(shù)時(shí),會(huì)給它傳遞三個(gè)參數(shù):當(dāng)前正在遍歷的元素, 元素索引, 原數(shù)組本身. // 第三個(gè)參數(shù)parseInt會(huì)忽視, 但第二個(gè)參數(shù)不會(huì),也就是說(shuō),parseInt把傳過(guò)來(lái)的索引值當(dāng)成進(jìn)制數(shù)來(lái)使用.從而返回了NaN. //應(yīng)該使用如下的用戶函數(shù)returnInt function returnInt(element){ return parseInt(element,10); } ["1", "2", "3"].map(returnInt);// 返回[1,2,3]
parseInt()方法
語(yǔ)法:parseInt(string, radix)
string 必需。要被解析的字符串。
radix 可選。
表示要解析的數(shù)字的基數(shù)。該值介于 2 ~ 36 之間。
如果省略該參數(shù)或其值為 0,則數(shù)字將以 10 為基礎(chǔ)來(lái)解析。如果它以 "0x" 或 "0X" 開頭,將以 16 為基數(shù)。
如果該參數(shù)小于 2 或者大于 36,則 parseInt() 將返回 NaN。
所以:["1", "2", "3"].map(parseInt)相當(dāng)于
[parseInt("1", 0), parseInt("2", 1), parseInt("3", 2)]
parseInt("3", 2) 的第二個(gè)參數(shù)是界于 2-36 之間的,之所以返回 NaN 是因?yàn)?字符串 "3" 里面沒有合法的二進(jìn)制數(shù),所以 NaN
高階函數(shù)——reduce
Array的reduce()把一個(gè)函數(shù)作用在這個(gè)Array的[x1, x2, x3...]上,這個(gè)函數(shù)必須接收兩個(gè)參數(shù),reduce()把結(jié)果繼續(xù)和序列的下一個(gè)元素做累積計(jì)算,其效果就是:
[x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4)
比方說(shuō)對(duì)一個(gè)Array求和,就可以用reduce實(shí)現(xiàn):
var arr = [1, 3, 5, 7, 9]; arr.reduce(function (x, y) { return x + y; }); // 25
高階函數(shù)——filter()
過(guò)濾器,返回true保留,false丟棄,類似map(),接收一個(gè)函數(shù)。
//篩選出字符串 var arr=[1,2,4,"dfdf",343,"asdfsad"]; var x=arr.filter(function(x){ return typeof(x)=="string" }) console.log(x)
filter回調(diào)函數(shù)可以帶三個(gè)參數(shù)
var arr = ["A", "B", "C"]; var r = arr.filter(function (element, index, self) { console.log(element); // 依次打印"A", "B", "C" console.log(index); // 依次打印0, 1, 2 console.log(self); // self就是變量arr return true; });
高階函數(shù)——sort()
sort()排序時(shí)先把元素轉(zhuǎn)換為字符串再進(jìn)行判斷,因此數(shù)字排序有時(shí)候不正確,因此需要我們自己傳入一個(gè)比較函數(shù)。
arr.sort(function(x,y){ if(xy){ rerturn 1; } return 0; }) //當(dāng)然最簡(jiǎn)潔是這樣寫 arr.sort(function(x,y){ return x-y;//正序 return y-x;//倒序 })
sort()方法會(huì)對(duì)當(dāng)前array進(jìn)行修改,返回時(shí)當(dāng)前的arry;
閉包
箭頭函數(shù)
(x,y)=> x*y 等同于 function(x,y){ return x*y; }
generator
ES6標(biāo)準(zhǔn),generator由function定義(注意多出的號(hào)),并且,除了return語(yǔ)句,還可以用yield返回多次
在js中一切都是對(duì)象。
包裝對(duì)象
在js中只有對(duì)象才可以使用.加屬性進(jìn)行訪問(wèn),js的三個(gè)基本類型number,string和boolean看著人家有對(duì)象心里不平衡,自己也想有對(duì)象,于是就借助包裝對(duì)象來(lái)讓自己變成對(duì)象,有兩個(gè)方式,一個(gè)是隱式轉(zhuǎn)換一個(gè)是顯式轉(zhuǎn)換。
什么是隱式轉(zhuǎn)換呢?看下面例子:
var str="asfkjas"; console.log(str.length);
變量str是一個(gè)字符串,但是卻可以使用.加屬性的形式獲取到字符長(zhǎng)度,這大大超出了我們的預(yù)知,完全是反人類啊,其實(shí)瀏覽器默默的給他包裝成了一個(gè)對(duì)象,本質(zhì)上是這樣的:
var str="asfkjas"; console.log(new String(str).length);
再例如:
var str="hello"; str.a="haha"; console.log(str.a)
結(jié)果是undefined,第二行聲明的時(shí)候默認(rèn)是new String(str).a="haha",用完就立即舍棄了,所以打印的時(shí)候并沒有賦值,結(jié)果是undefined;
具體解釋點(diǎn)擊這里
建議包裝對(duì)象不要隨意使用,涉及到類型轉(zhuǎn)換的時(shí)候建議使用以下方式:
不要使用new Number()、new Boolean()、new String()創(chuàng)建包裝對(duì)象;
用parseInt()或parseFloat()來(lái)轉(zhuǎn)換任意類型到number;
用String()來(lái)轉(zhuǎn)換任意類型到string,或者直接調(diào)用某個(gè)對(duì)象的toString()方法;
通常不必把任意類型轉(zhuǎn)換為boolean再判斷,因?yàn)榭梢灾苯訉慽f (myVar) {...};
typeof操作符可以判斷出number、boolean、string、function和undefined;
判斷Array要使用Array.isArray(arr);
判斷null請(qǐng)使用myVar === null;
判斷某個(gè)全局變量是否存在用typeof window.myVar === "undefined";
函數(shù)內(nèi)部判斷某個(gè)變量是否存在用typeof myVar === "undefined"。
null和undefined沒有toString()方法。
number調(diào)用toString()時(shí)應(yīng)該這樣:
123..toString(); // "123", 注意是兩個(gè)點(diǎn)! (123).toString(); // "123"
為什么?不要問(wèn)為什么?這就是js的樂趣!
String()和toString()方法的區(qū)別
兩個(gè)轉(zhuǎn)換小技巧:
var x1=x+""; console.log(typeof(x1));//string var y="123"; var y1=y-0; console.log(typeof(y1));//number
date
var now = new Date(); now; // Wed Jun 24 2015 19:49:22 GMT+0800 (CST) now.getFullYear(); // 2015, 年份 now.getMonth(); // 5, 月份,注意月份范圍是0~11,5表示六月 now.getDate(); // 24, 表示24號(hào) now.getDay(); // 3, 表示星期三 now.getHours(); // 19, 24小時(shí)制 now.getMinutes(); // 49, 分鐘 now.getSeconds(); // 22, 秒 now.getMilliseconds(); // 875, 毫秒數(shù) now.getTime(); // 1435146562875, 以number形式表示的時(shí)間戳 new Date(1487644350463)//獲取一個(gè)時(shí)間戳之后使用Date()轉(zhuǎn)換成時(shí)間格式
RegExp
基礎(chǔ)規(guī)則
用d可以匹配一個(gè)數(shù)字
w可以匹配一個(gè)字母或數(shù)字
.可以匹配任意字符
用*表示任意個(gè)字符(包括0個(gè))
用+表示至少一個(gè)字符
用?表示0個(gè)或1個(gè)字符
用{n}表示n個(gè)字符
用{n,m}表示n-m個(gè)字符
JSON
JSON還定死了字符集必須是UTF-8,表示多語(yǔ)言就沒有問(wèn)題了。為了統(tǒng)一解析,JSON的字符串規(guī)定必須用雙引號(hào)"",Object的鍵也必須用雙引號(hào)""。
面向?qū)ο缶幊?/strong>
js沒有類的概念,可是通過(guò)__prototype__來(lái)實(shí)現(xiàn)繼承,但是這個(gè)方法不要使用,有兼容問(wèn)題,可以通過(guò)創(chuàng)建函數(shù)的形式來(lái)實(shí)現(xiàn)類似java類繼承。
// 原型對(duì)象: var Student = { name: "Robot", height: 1.2, run: function () { console.log(this.name + " is running..."); } }; function createStudent(name) { // 基于Student原型創(chuàng)建一個(gè)新對(duì)象: var s = Object.create(Student); // 初始化新對(duì)象: s.name = name; return s; } var xiaoming = createStudent("小明"); xiaoming.run(); // 小明 is running... xiaoming.__proto__ === Student; // true
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/86769.html
摘要:安裝筆記官網(wǎng)下載文件官網(wǎng)地址安裝程序雙擊進(jìn)行安裝。點(diǎn)擊下一步程序安裝的一個(gè)好的習(xí)慣是,把程序安裝到盤或者盤的目錄下面。 Node.JS安裝筆記 Node.js? is a JavaScript runtime built on Chromes V8 JavaScript engine. Node.js uses an event-driven, non-blocking I/O mo...
摘要:安裝筆記官網(wǎng)下載文件官網(wǎng)地址安裝程序雙擊進(jìn)行安裝。點(diǎn)擊下一步程序安裝的一個(gè)好的習(xí)慣是,把程序安裝到盤或者盤的目錄下面。 Node.JS安裝筆記 Node.js? is a JavaScript runtime built on Chromes V8 JavaScript engine. Node.js uses an event-driven, non-blocking I/O mo...
摘要:安裝筆記官網(wǎng)下載文件官網(wǎng)地址安裝程序雙擊進(jìn)行安裝。點(diǎn)擊下一步程序安裝的一個(gè)好的習(xí)慣是,把程序安裝到盤或者盤的目錄下面。 Node.JS安裝筆記 Node.js? is a JavaScript runtime built on Chromes V8 JavaScript engine. Node.js uses an event-driven, non-blocking I/O mo...
摘要:菜鳥教程這是一個(gè)屬性其值是字符串菜鳥教程同上這是一個(gè)屬性其值是字符串用于定義的函數(shù),可以通過(guò)來(lái)返回函數(shù)值。它們都有前綴,以便與用戶定義的屬性區(qū)分開來(lái)。 開篇語(yǔ) 我最近學(xué)習(xí)了js,取得進(jìn)步,現(xiàn)在學(xué)習(xí)vue.js.建議新手學(xué)習(xí),請(qǐng)不要用npm的方式(vue-cli,vue腳手架),太復(fù)雜了. 請(qǐng)直接下載vue.js文件本地引入,就上手學(xué)習(xí)吧參照菜鳥教程網(wǎng)站的vue.js教程http://...
摘要:學(xué)習(xí)學(xué)習(xí)筆記介紹是一種繪圖協(xié)議,它把和結(jié)合在一起,通過(guò)增加的一個(gè)綁定,可以為提供硬件加速渲染。環(huán)境搭建為了以后的學(xué)習(xí)方便,首先是搭建一個(gè)萬(wàn)能框架,所有的開發(fā)都可以在此框架上進(jìn)行。 WebGL學(xué)習(xí)----Three.js學(xué)習(xí)筆記(1) webgl介紹 WebGL是一種3D繪圖協(xié)議,它把JavaScript和OpenGL ES 2.0結(jié)合在一起,通過(guò)增加OpenGL ES 2.0的一個(gè)Ja...
摘要:記錄學(xué)習(xí)的點(diǎn)點(diǎn)滴滴,方便日后查看。筆記源于網(wǎng)老師安裝官網(wǎng)下載安裝官網(wǎng)下載與電腦配版本,說(shuō)明一下是長(zhǎng)期支持版本是當(dāng)前最新版本。瀏覽器請(qǐng)求訪問(wèn)此地址會(huì)出現(xiàn),第一個(gè)服務(wù)就完成了,是不是很簡(jiǎn)單。模塊分類模塊分為核心模塊文件模塊第三方模塊。 記錄學(xué)習(xí) Node.js 的點(diǎn)點(diǎn)滴滴,方便日后查看。(筆記源于imooc網(wǎng)Scott老師) 1. 安裝 Node.js官網(wǎng):https://nodejs....
閱讀 1410·2021-11-22 15:25
閱讀 3430·2021-10-21 09:38
閱讀 1634·2021-10-19 13:21
閱讀 1052·2021-09-06 15:00
閱讀 1747·2019-08-30 15:44
閱讀 2639·2019-08-29 15:40
閱讀 3583·2019-08-29 13:44
閱讀 2132·2019-08-26 16:56