亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

js學(xué)習(xí)筆記

MiracleWong / 3459人閱讀

摘要:小明在一個(gè)方法內(nèi)部,是一個(gè)特殊變量,它始終指向當(dāng)前對(duì)象,也就是這個(gè)變量。原型對(duì)象基于原型創(chuàng)建一個(gè)新對(duì)象初始化新對(duì)象小明小明

數(shù)據(jù)類型

數(shù)字
字符串
布爾:falsetrue
數(shù)組
對(duì)象
null——空值
undefined——未定義。僅僅在判斷函數(shù)參數(shù)是否傳遞的情況下使用

字符串

""或者""包括的叫字符串。
轉(zhuǎn)義字符:""
toUpperCase()——轉(zhuǎn)換為大寫
toLowerCase()——轉(zhuǎn)換為小寫
indexOf()——搜索指定字符串出現(xiàn)的位置,如果沒有找到返回-1
subString(start,end)——字符串截取,索引值不包含end

數(shù)組

獲取數(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返回多次

標(biāo)準(zhǔn)對(duì)象

在js中一切都是對(duì)象。

包裝對(duì)象
在js中只有對(duì)象才可以使用.加屬性進(jìn)行訪問(wèn),js的三個(gè)基本類型number,stringboolean看著人家有對(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"。
nullundefined沒有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

相關(guān)文章

  • 前端開發(fā)學(xué)習(xí)筆記 - 1. Node.JS安裝筆記

    摘要:安裝筆記官網(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...

    jemygraw 評(píng)論0 收藏0
  • 前端開發(fā)學(xué)習(xí)筆記 - 1. Node.JS安裝筆記

    摘要:安裝筆記官網(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...

    BingqiChen 評(píng)論0 收藏0
  • 前端開發(fā)學(xué)習(xí)筆記 - 1. Node.JS安裝筆記

    摘要:安裝筆記官網(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...

    Bryan 評(píng)論0 收藏0
  • (原創(chuàng))vue 學(xué)習(xí)筆記

    摘要:菜鳥教程這是一個(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://...

    layman 評(píng)論0 收藏0
  • WebGL three.js學(xué)習(xí)筆記 創(chuàng)建three.js代碼的基本框架

    摘要:學(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...

    mtunique 評(píng)論0 收藏0
  • Node.js 學(xué)習(xí)筆記_20170924(持續(xù)更新...)

    摘要:記錄學(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....

    魏憲會(huì) 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<