Js基礎(chǔ)

JS

1、js簡(jiǎn)介

JavaScript是一種基于對(duì)象的客戶端的腳本語(yǔ)言

是一種弱類(lèi)型的動(dòng)態(tài)腳本語(yǔ)言

弱類(lèi)型:對(duì)數(shù)據(jù)類(lèi)型要求不嚴(yán)格,只有當(dāng)執(zhí)行到某一句代碼的時(shí)候,才去確定這個(gè)變量里的數(shù)據(jù)是什么類(lèi)型

動(dòng)態(tài)語(yǔ)言:就是指在運(yùn)行過(guò)程當(dāng)中,可以動(dòng)態(tài)地給對(duì)象添加屬性和方法

js能做什么

  • 網(wǎng)頁(yè)特效

  • 數(shù)據(jù)驗(yàn)證

  • 游戲開(kāi)發(fā)

  • 與服務(wù)器交互

  • 服務(wù)端開(kāi)發(fā)

js的歷史

1995年誕生,專(zhuān)用于客戶端數(shù)據(jù)驗(yàn)證,叫LiveScript

當(dāng)時(shí)Java很火,為了推廣,更名Javascript

1996年,微軟發(fā)布了自己的Javascript,叫JScript

1997年,ECMA組織規(guī)定了Javascript的標(biāo)準(zhǔn),叫ECMAScript,約束了js的語(yǔ)法和功能

2003年,js被大量用于頁(yè)面廣告,被稱(chēng)為“牛皮癬”

2004年,Google公司推出Ajax技術(shù),拯救了Js

2007年,移動(dòng)端的出現(xiàn)讓js更加得到重視

2010年,H5推出,Canvas和Javascript的結(jié)合使用,讓js功能更加強(qiáng)大

2011年,nodejs的出現(xiàn),讓js前后端通吃

js的組成

ECMAScript 規(guī)定了js的語(yǔ)法規(guī)范和所具有的功能

DOM(document object model)文檔對(duì)象模型:就是js操作頁(yè)面結(jié)構(gòu)的一套工具(方法)

BOM (browser object model)瀏覽器對(duì)象模型 :操作瀏覽器部分功能的一套方法

如何使用js

  • 內(nèi)嵌式

  • 外聯(lián)式

  • 行內(nèi)式(了解)

JS語(yǔ)法

1、注釋

讓js解釋器,忽略注釋之后的內(nèi)容

單行注釋 //

多行注釋 /* 需要注釋的內(nèi)容 */

作用:解釋說(shuō)明,文檔注釋

2、常用全局函數(shù)

  • alert() 彈出一個(gè)提示框,警告框console.log() 在控制臺(tái)中輸出內(nèi)容 document.write() 在頁(yè)面上輸出內(nèi)容

3、變量

什么是變量?簡(jiǎn)單的理解為:變量是用來(lái)存儲(chǔ)數(shù)據(jù)的容器

深刻的理解變量:變量并不是真正保存數(shù)據(jù)的地方,真正保存數(shù)據(jù)的地方是內(nèi)存,內(nèi)存存在一個(gè)內(nèi)存地址,變量負(fù)責(zé)保存內(nèi)存地址,內(nèi)存地址指向數(shù)據(jù)

4、變量的聲明和賦值

var 變量名;

聲明和賦值可以同時(shí)進(jìn)行 var a = "張三";

聲明和賦值可以分開(kāi):var a; a = "李四";

變量聲明是可以一次聲明多個(gè): var a,b,c,d; or var c=1,d=2,e=3;

變量是可以重復(fù)賦值: var a = 10; a = 12;

5、變量命名規(guī)范

  • 字母,下劃線,數(shù)字,$ 這些可用的字符

  • 不能用數(shù)字開(kāi)頭

  • 不能使用關(guān)鍵字,保留字

  • 嚴(yán)格區(qū)分大小寫(xiě)

  • 建議變量的命名要有意義

  • 建議使用駝峰命名法

駝峰命名法:第一個(gè)單詞的首字母小寫(xiě),第二個(gè)及以后的單詞首字母大寫(xiě)

userNameOne

關(guān)鍵字和保留字:

image

保留字:現(xiàn)在還不是關(guān)鍵字,將來(lái)有可能成為關(guān)鍵字

image

注意:使用保留字為變量命名是不會(huì)報(bào)錯(cuò),但是為了程序的安全性考慮,我們規(guī)定不能使用保留字作為變量名

1、js數(shù)據(jù)類(lèi)型

基本類(lèi)型:number數(shù)字,string字符串,布爾boolean,undefined,null

引用類(lèi)型:object

number數(shù)字類(lèi)型

包括所有的數(shù)字(浮點(diǎn)數(shù),整數(shù),正數(shù),負(fù)數(shù))和 NaN

NaN 表示某個(gè)結(jié)果不是一個(gè)數(shù)字,但是它歸屬于Number類(lèi)型

isNaN() 判斷某個(gè)數(shù)據(jù)是否不是一個(gè)數(shù)字,當(dāng)數(shù)據(jù)是數(shù)字的時(shí)候,返回false,當(dāng)數(shù)據(jù)不是數(shù)字的時(shí)候,返回true

數(shù)字的進(jìn)制:

二進(jìn)制 滿二進(jìn)一 0-1

八進(jìn)制 滿八進(jìn)一 0-7

十進(jìn)制 滿十進(jìn)一 0-9

十六進(jìn)制 滿十六進(jìn)一 0-9a-f

String字符串類(lèi)型

格式:使用雙引號(hào),或者單引號(hào)包起來(lái)

字符串不可變性: 在js當(dāng)中,操作字符串的時(shí)候,并不是在原來(lái)的字符串上進(jìn)行修改,而是重新開(kāi)辟內(nèi)存,生成新的字符串,把變量重新指向新的字符串,原來(lái)的字符串并不會(huì)馬上消失,而是等待垃圾回收機(jī)制進(jìn)行回收

Boolean布爾類(lèi)型

只有兩個(gè)值:ture,false 通常表示對(duì)和錯(cuò),表示條件成立與否 比較運(yùn)算符

null

空 只有一個(gè)值 null 表示不是一個(gè)對(duì)象

undefined

未定義

只有一個(gè)值 undefined

聲明變量的時(shí)候,如果沒(méi)有賦值,默認(rèn)就是賦值為undefined

2、運(yùn)算符

比較運(yùn)算符

< >= <= == != 不嚴(yán)格等于: 比較的是內(nèi)容(值)

=== !== 嚴(yán)格等于: 比較的是內(nèi)容(值)和類(lèi)型

算術(shù)運(yùn)算符

  • 二元算術(shù)運(yùn)算符 + - * / %
  • :運(yùn)算
    ?
    數(shù)字相加:得到數(shù)字
    ?
    數(shù)字和非數(shù)字內(nèi)容的字符串相加:字符串
    ?
    數(shù)字和數(shù)字內(nèi)容的字符串相加:字符串
    ?
    -,*,/,% : 運(yùn)算
    ?
    數(shù)字相運(yùn)算得到數(shù)字
    ?
    數(shù)字和數(shù)字內(nèi)容的字符串運(yùn)算:得到數(shù)字
    ?
    數(shù)字和非數(shù)字內(nèi)容的字符串運(yùn)算:NaN</pre>
  • 一元算術(shù)運(yùn)算符++,--

前++(--) ++a:先對(duì)a進(jìn)行自增或者是自減,然后以新的值參與運(yùn)算

后++(--)a++:先以a的值進(jìn)行運(yùn)算,然后再進(jìn)行自增或者自減

邏輯運(yùn)算符

&& 與 兩個(gè)條件都是true的時(shí)候?yàn)閠rue

|| 或 兩個(gè)條件都是false的時(shí)候?yàn)閒alse

! 非 顛倒是非

短路運(yùn)算

&& 短路: 當(dāng)&&左邊為true的時(shí)候,結(jié)果就跟左邊沒(méi)有關(guān)系了,直接得到&&的右邊(執(zhí)行結(jié)果)

|| 短路: 當(dāng)||的左邊為false,結(jié)果就跟false沒(méi)關(guān)系,直接得到||右邊的執(zhí)行結(jié)果

賦值運(yùn)算符

= :最簡(jiǎn)單的賦值運(yùn)算

復(fù)雜:+=,-=,*=,/=, %=

運(yùn)算符的優(yōu)先級(jí)

image

3、類(lèi)型轉(zhuǎn)換

  • 將字符串轉(zhuǎn)換為數(shù)字
Number()
只能轉(zhuǎn)換數(shù)字為內(nèi)容的字符串,否則得到NaN
可以轉(zhuǎn)換浮點(diǎn)數(shù)
?
parseInt()
只能得到整數(shù)
會(huì)盡可能的嘗試轉(zhuǎn)換到第一個(gè)非數(shù)字的字符為止
?
parseFloat()
會(huì)盡可能的嘗試轉(zhuǎn)換到第一個(gè)非數(shù)字的字符為止
可以轉(zhuǎn)換浮點(diǎn)數(shù)(能取到小數(shù))</pre>
  • 將其他轉(zhuǎn)換成字符串
    1 String() 可以將任意類(lèi)型轉(zhuǎn)換為字符串
    2 .toString() 可以將部分類(lèi)型轉(zhuǎn)換為字符串,null,undefined不能使用
    3 隱式轉(zhuǎn)換:+ ""

  • 轉(zhuǎn)換為布爾類(lèi)型

Boolean()
把其他任意類(lèi)型轉(zhuǎn)換為布爾
?
在js當(dāng)中,有哪些可以轉(zhuǎn)換為false
null,undefined,0,"",false,NaN
?
隱式轉(zhuǎn)換  !!數(shù)據(jù)

類(lèi)型判斷

判斷數(shù)據(jù)的類(lèi)型 typeof 數(shù)據(jù) or typeof(數(shù)據(jù))

4、js的語(yǔ)法結(jié)構(gòu)

  • 順序結(jié)構(gòu)

  • 選擇結(jié)構(gòu)(if-else 和switch-case)

    if (條件表達(dá)式) {
    條件表達(dá)式成立的時(shí)候執(zhí)行的語(yǔ)句
    }
    ?
    if (條件表達(dá)式) {
    條件表達(dá)式成立的時(shí)候執(zhí)行的語(yǔ)句
    }else {
    條件表達(dá)式不成立的時(shí)候執(zhí)行的語(yǔ)句
    }
    ?
    if (表達(dá)式1) {
    表達(dá)式1成立時(shí)執(zhí)行的代碼
    }else if (表達(dá)式2){
    表達(dá)式2成立時(shí)執(zhí)行的代碼
    }else if (){
    ?
    }...
    else {
    所有的表達(dá)式都不成立時(shí)執(zhí)行的代碼
    }
    ?


    switch(n) {
    case 定值1:
    當(dāng)n和定值1相等的時(shí)候執(zhí)行的代碼
    break;
    case 定值2:
    當(dāng)n和定值2相等的時(shí)候執(zhí)行的代碼
    break;
    case 定值3:
    當(dāng)n和定值3相等的時(shí)候執(zhí)行的代碼
    break;
    default:
    當(dāng)n和所有的定值都不相等的時(shí)候執(zhí)行的代碼
    }


    switch-case和if-else的區(qū)別

    • if-else 通常用來(lái)比較區(qū)間值
    • switch-case 只能用來(lái)比較定值

    所以,建議在一個(gè)變量和多個(gè)定值比較的時(shí)候,用switch-case,如果只有一個(gè)定值要比較,建議使用if-else,如果是區(qū)間值,只能只用if-else
    ?


    三元表達(dá)式:
    表達(dá)式1 ? 表達(dá)式2 : 表達(dá)式3
    先判斷表達(dá)式1是否成立,如果成立,執(zhí)行表達(dá)式2,并且返回表達(dá)式2的執(zhí)行結(jié)果,如果表達(dá)式1不成立,執(zhí)行表達(dá)式3,并且返回表達(dá)式3的執(zhí)行結(jié)果,當(dāng)邏輯處理比較復(fù)雜的時(shí)候,使用if-else,如果邏輯處理非常簡(jiǎn)單,使用三元表達(dá)式

  • 循環(huán)結(jié)構(gòu)

    什么是循環(huán):重復(fù)的去做一件事情 ,重復(fù)執(zhí)行一段代碼

    while循環(huán)
    ?
    while (條件表達(dá)式){
    循環(huán)體,就是條件表達(dá)式成立的時(shí)候重復(fù)執(zhí)行的代碼
    }
    ?
    do {
    循環(huán)體
    }while(條件表達(dá)式)
    ?
    ?
    do-while 和 while 的區(qū)別:
    while 循環(huán),有可能一次循環(huán)體都不執(zhí)行
    do-while 至少執(zhí)行一次循環(huán)體


    for循環(huán)
    for ( 循環(huán)的初識(shí)值 ; 條件表達(dá)式 ; 自增或者自減的步長(zhǎng) ) {
    循環(huán)體
    }
    執(zhí)行順序:
    先初始化初始值,判斷條件表達(dá)式是否成立,執(zhí)行循環(huán)體,循環(huán)體執(zhí)行完畢之后,自增或者自減,再檢查條件是否成立,成立就執(zhí)行循環(huán)體,否則結(jié)束循環(huán)
    ?
    for循環(huán)和while循環(huán)的區(qū)別:
    ?
    while 可以無(wú)限次循環(huán),通常用來(lái)做未知次數(shù)的循環(huán)
    ?
    for 從一開(kāi)始就指定循環(huán)的次數(shù),用來(lái)做已知次數(shù)的循環(huán)</pre>

5、數(shù)組

什么是數(shù)組

數(shù)組就是數(shù)據(jù)的有序集合,有長(zhǎng)度 length,在js當(dāng)中,數(shù)組可以裝任意類(lèi)型的數(shù)據(jù)

創(chuàng)建數(shù)組
構(gòu)造函數(shù)的方式
var arr = new Array(); // 創(chuàng)建了一個(gè)空的數(shù)組,長(zhǎng)度為0
var arr = new Array(100); //創(chuàng)建了一個(gè)空的數(shù)組,長(zhǎng)度為100
?
字面量表示法:
var arr = []; // 創(chuàng)建了一個(gè)空的數(shù)組,長(zhǎng)度為0</pre>

數(shù)組的賦值

使用索引賦值,數(shù)組的索引是從0開(kāi)始
var arr = [];
arr[0] = 1;
arr[1] = 2;
arr[2] = "ABC";
arr[3] = false;
?


數(shù)組的初始化賦值:
?
ar arr = new Array(1,2,"abc",false);
var arr2 = [1,2,"abc",false];

數(shù)組的取值

使用索引取值
var str = arr[2]; // 通過(guò)索引取值,要使用[]運(yùn)算符

數(shù)組的遍歷

for(var i = 0; i < arr.length ; i++ ){
console.log(arr[i]);
}

6、數(shù)組的操作方法

  • concat:連接數(shù)組 不會(huì)改變?cè)瓉?lái)的數(shù)組,而是得到一個(gè)新的數(shù)組

    join : 使用某一個(gè)字符,連接所有的數(shù)組的元素,得到一個(gè)字符串

  • push(xx, ....):向一個(gè)數(shù)組中添加一個(gè)或者多個(gè)元素,并且返回?cái)?shù)組增加元素之后的長(zhǎng)度

    會(huì)修改原來(lái)的數(shù)組

  • shift:刪除數(shù)組的第一個(gè)元素,并返回,也會(huì)修改原數(shù)組

  • pop(): 刪除數(shù)組中的最后一個(gè)元素,并且返回這個(gè)元素,會(huì)修改原數(shù)組

  • indexOf(searchValue [,formindex]):獲取數(shù)組中某個(gè)元素第一次出現(xiàn)的索引,但是如果規(guī)定從哪個(gè)索引開(kāi)始查找,可以查找到任意位置元素

  • slice(start,end) 獲取從數(shù)組中某個(gè)下標(biāo)開(kāi)始,到end結(jié)束的所有元素,但是不能獲取到end

  • splice()

清空數(shù)組

var arr= [1,2,3,4,5];
// arr.splice(0);
// console.log(arr);
// console.log(arr);
// arr.length = 0;
console.log(arr);
arr = [];
console.log(arr);

7、函數(shù)

什么是函數(shù)

可以在需要的時(shí)候執(zhí)行的,可以重復(fù)使用的一段代碼 ,思想:代碼復(fù)用,把不變的放到函數(shù)體里面,把改變的變成參數(shù)

定義函數(shù)

1、使用function關(guān)鍵字聲明
function 函數(shù)名 ( 參數(shù)列表 ) {
函數(shù)體
}
?
2、函數(shù)表達(dá)式
var 函數(shù)名 = function (參數(shù)列表) {
函數(shù)體
}

函數(shù)命名

命名規(guī)范和變量一樣,推薦使用動(dòng)詞,推薦駝峰命名

函數(shù)的調(diào)用

函數(shù)名(參數(shù)的列表);

函數(shù)的返回值

函數(shù)執(zhí)行完畢之后,得到一個(gè)結(jié)果,就是函數(shù)的返回值

  • 如果函數(shù)里面沒(méi)有寫(xiě)return關(guān)鍵字,函數(shù)執(zhí)行完畢之后,會(huì)默認(rèn)的到undefined

  • 如果函數(shù)里有些return,但是return沒(méi)有跟任何的東西,函數(shù)執(zhí)行完畢,會(huì)默認(rèn)得到undefined

  • 如果函數(shù)里有return,并且return后面跟著某個(gè)變量或者值,函數(shù)執(zhí)行之后,得到return后面的這個(gè)東西

return關(guān)鍵字,除了可以返回函數(shù)的返回值之外,還能,終止函數(shù)的執(zhí)行

函數(shù)的參數(shù)

  • 形參

形式參數(shù),就是我們?cè)诼暶骱瘮?shù)的時(shí)候?qū)懺趨?shù)列表里的參數(shù),起到占位的作用,讓我們可以在調(diào)用函數(shù)的時(shí)候,傳入響應(yīng)參數(shù),來(lái)在函數(shù)執(zhí)行的時(shí)候參與運(yùn)算

  • 實(shí)參

其實(shí)就是我們?cè)谡{(diào)用函數(shù)的時(shí)候傳入?yún)?shù),是實(shí)際參與函數(shù)執(zhí)行的參數(shù)。

函數(shù)的四種形式

1、無(wú)參無(wú)返回值
function logError(){
console.log("這里出現(xiàn)了一個(gè)錯(cuò)誤");
}
?
2、無(wú)參有返回值
function getRandom(){
return Math.random();
}
?
3、有參無(wú)返回值
function log(msg){
console.log(msg);
}
?
4、有參有返回值
function getSum(n){
var sum = 0;
for (var i = 1; i < n; i++) {
sum += i;
}
return sum;
}

函數(shù)調(diào)用函數(shù)的執(zhí)行過(guò)程

當(dāng)函數(shù)去調(diào)用另一個(gè)函數(shù)的時(shí)候,會(huì)去到那個(gè)被調(diào)用的函數(shù)里執(zhí)行,被調(diào)用的函數(shù)執(zhí)行完畢之后,會(huì)回到調(diào)用它的位置

函數(shù)也是數(shù)據(jù)類(lèi)型

function fn(){
}
console.log(typeof fn); //得到的結(jié)果是輸出了:function 是數(shù)據(jù)類(lèi)型,就可以當(dāng)成參數(shù)傳遞

匿名函數(shù)

沒(méi)有函數(shù)名的函數(shù)

function (參數(shù)列表) {
函數(shù)體
}</pre>

自執(zhí)行函數(shù)

聲明結(jié)束之后,立刻執(zhí)行

(function (){
console.log("1");
console.log("2");
})();</pre>

8、作用域

  • 全局作用域

    在頁(yè)面的任意位置都可以訪問(wèn)的作用域,在全局作用域下聲明的變量,可以在任意位置訪問(wèn)

  • 局部作用域

    就是指函數(shù)的內(nèi)部,在函數(shù)內(nèi)部聲明的變量就是局部變量,如果在局部作用域內(nèi),沒(méi)有使用var聲明的變量,這個(gè)變量是一個(gè)全局變量 。但是這種做法不推薦

9、預(yù)解析

js的執(zhí)行不是單純解釋一行執(zhí)行一行,而是有一個(gè)預(yù)解析的過(guò)程,會(huì)找到當(dāng)前作用域下的所有的var和function關(guān)鍵字,把變量的聲明和函數(shù)的聲明提升到當(dāng)前作用域的最頂端。

變量提升和函數(shù)提升

其實(shí)就是預(yù)解析的時(shí)候做的變量的聲明提前和函數(shù)的聲明提前

定時(shí)器

setTimeOut

setInterver

10、JS的內(nèi)置對(duì)象

Math對(duì)象

就是js提供的一套關(guān)于數(shù)學(xué)的一些方法

  • Math.ceil() 向上取整

  • Math.floor() 向下取整Math.pow(x,y) 求x的y次方 Math.max(x,y,z,...) 求兩個(gè)或多個(gè)數(shù)字的最大值 Math.min(x,y,z...) 求兩個(gè)或者多個(gè)數(shù)字的最小值 Math.random() 獲得[0,1)之間的隨機(jī)數(shù) Math.PI js當(dāng)中的圓周率

Data對(duì)象

創(chuàng)建當(dāng)前日期的日期對(duì)象
var date = new Date();
?
創(chuàng)建指定日期的日期對(duì)象
var date = new Date(2016,10,1); //注意:這里的月份是要從0開(kāi)始,如果想要得到10月1號(hào)則要寫(xiě)9月


獲取日期的毫秒數(shù)
var ms1 = +new Date();
or
var date = new Date();
console.log(date.getTime());


獲取日期對(duì)象的每一個(gè)部分
var date = new Date();
?
//獲取年份
console.log(date.getFullYear());
//獲取月份,獲得到的月份是從0開(kāi)始
console.log(date.getMonth());
//獲取日期中日
console.log(date.getDate());
//獲取日期中的星期幾,要注意的是,星期是從星期日,得到0就是星期日,得到6,就是星期六
console.log(date.getDay());
//獲得小時(shí),0到23
console.log(date.getHours());
//獲取分鐘,0到59
console.log(date.getMinutes());
//獲取秒數(shù),0到59
console.log(date.getSeconds());
//獲取毫秒數(shù),得到0到999
console.log(date.getMilliseconds());</pre>

操作字符串的方法

var str = "abcdefghijklmn";
?
得到某一個(gè)位置的字符
console.log(str.charAt(0));
console.log(str[5]);
?
concat用來(lái)連接多個(gè)字符串的方法
var str2 = "abc";
var str3 = "def";
連接多個(gè)字符串,得到一個(gè)新的字符串,不會(huì)改變?cè)瓉?lái)的字符串
console.log(str.concat(str2,str3));
console.log(str);
?
slice用來(lái)截取從start開(kāi)始,到end結(jié)束的字符
console.log(str.slice(3,7));
?
substring用來(lái)截取字符串,從start開(kāi)始,到end結(jié)束的字符,可以取到start,不能得道end
console.log(str.substring(3,7));
?
substr(start,length),意思是從start開(kāi)始,一共截取length的長(zhǎng)度
console.log(str.substr(3,5));
?
indexOf 查找某一個(gè)字符在字符串中的位置,只能找到從某一個(gè)位置開(kāi)始的第一個(gè)
console.log(str.indexOf("z"));
var str = "abcabcabc";
console.log(str.indexOf("c",3));
?
?
lastIndexOf,從后面開(kāi)始往前面找,也只能找到第一次出現(xiàn)的位置,除了查找的方向和indexOf不一樣,其他都一樣
var str = "abcabcabc";
console.log(str.lastIndexOf("a",5));
?
trim方法,用來(lái)去除字符串兩邊的空格,會(huì)得到新的字符串,不會(huì)改變?cè)址?br> var str = " abc def hij ";
console.log(str);
console.log(str.length);
console.log(str.trim());
console.log(str);
?
字符串大小寫(xiě)轉(zhuǎn)換
?
var str = "abcdef";
大寫(xiě)轉(zhuǎn)換,不會(huì)對(duì)原來(lái)的字符串造成影響
var str2 = str.toUpperCase();
var str3 = str.toLocaleUpperCase();
console.log(str2);
console.log(str3);
console.log(str);
?
小寫(xiě)轉(zhuǎn)換,不會(huì)對(duì)原字符串造成影響
var str4 = str2.toLowerCase();
var str5 = str3.toLocaleLowerCase();
console.log(str4);
console.log(str5);
console.log(str2);
console.log(str3);
?
replace替換字符串里的對(duì)應(yīng)字符,但是只能替換掉匹配的第一個(gè)
var str = "abcdeffkfkfff";
?
var str2 = str.replace("f","g");
console.log(str2);
console.log(str);
?
split把字符串變成數(shù)組,根據(jù)的是分割的字符
?
var arr = [1,2,3,4,5,6];
var str = arr.join("|");
console.log(str);
?
var newArr = str.split("|");
console.log(newArr);
?
var str = "abcabcabc";
var arr = str.split("a");
var arr = str.split("");
console.log(arr);

對(duì)象

在js當(dāng)中,對(duì)象就是無(wú)序?qū)傩缘募?,?duì)象里面包含屬性和方法

創(chuàng)建對(duì)象

1 構(gòu)造函數(shù)法

var o = new Object();

2 對(duì)象的字面量表示法

var o = {};

訪問(wèn)對(duì)象的屬性

  • 使用點(diǎn)的方式

    使用點(diǎn)的方式訪問(wèn)對(duì)象的屬性,獲取對(duì)應(yīng)的屬性的值
    console.log(nokia.brand);
    console.log(nokia.name);

  • 通過(guò)鍵的方式

    使用鍵的方式訪問(wèn)對(duì)象的屬性
    console.log(nokia["with"]);

  • 使用for-in的方式遍歷對(duì)象

    for-in 的方式訪問(wèn)對(duì)象屬性,可以訪問(wèn)到某個(gè)對(duì)象的所有屬性和方法
    // for(var 鍵 in 要訪問(wèn)的對(duì)象){
    // 循環(huán)體
    // }
    for(var k in nokia){
    console.log("對(duì)應(yīng)的鍵是"+k+",對(duì)應(yīng)的值是"+nokia[k]);
    }

自定義對(duì)象的構(gòu)造函數(shù)

構(gòu)造函數(shù)本質(zhì)上也是函數(shù),只不過(guò)是專(zhuān)門(mén)用來(lái)創(chuàng)建對(duì)象,并且使用new的方式

function Person(name,height,weight,color){
// 在構(gòu)造函數(shù)當(dāng)中,this關(guān)鍵字,就是構(gòu)造函數(shù)幫我們創(chuàng)建好的對(duì)象
this.name = name;
this.height = height;
this.weight = weight;
this.color = color;
?
this.sayHi = function(){
console.log("你好,我的名字是" + this.name +",我的身高是" + this.height + ",我的體重是" + this.weight);
}
}
?
var zs = new Person("張三",150,50,"yellow");
var ls = new Person("李四",180,70,"black");
console.log(zs);
console.log(ls);

this關(guān)鍵字

  • 在構(gòu)造函數(shù)當(dāng)中

this關(guān)鍵字在構(gòu)造函數(shù)當(dāng)中,就是指構(gòu)造在創(chuàng)建對(duì)象時(shí)的那個(gè)對(duì)象

  • 在函數(shù)或者方法當(dāng)中

誰(shuí)調(diào)用函數(shù)或者方法,this就是誰(shuí)

new關(guān)鍵字

new 用來(lái)創(chuàng)建新的對(duì)象

1 先創(chuàng)建了一個(gè)自定義對(duì)象

2 把this關(guān)鍵字指向剛才創(chuàng)建的對(duì)象

3 執(zhí)行構(gòu)造函數(shù)里的代碼,也就是想this(已經(jīng)創(chuàng)建的對(duì)象)添加屬相和方法

4 返回this(被創(chuàng)建的對(duì)象)

JSON

其實(shí)JSON,就是結(jié)構(gòu)化數(shù)據(jù)格式

1 JSON格式的鍵,必須是雙引號(hào)包裹的字符串

2 不支持undefined
{
"name" : "張無(wú)忌",
"wugong" : "九陽(yáng)神功",
"attack" : 999999
// "deadTime" : undefined
}</pre>

基本類(lèi)型和引用類(lèi)型

基本類(lèi)型(值類(lèi)型)

是存儲(chǔ)在??臻g上,當(dāng)我們聲明多個(gè)變量的值都是一樣的時(shí)候,是分配不同的內(nèi)存位置,當(dāng)我們調(diào)用函數(shù)的時(shí)候,會(huì)把這些值復(fù)制一份進(jìn)入函數(shù)區(qū)運(yùn)行,就不會(huì)改變?cè)瓉?lái)實(shí)參的值

引用類(lèi)型

是存儲(chǔ)在堆空間里的,只有一份,如果有多個(gè)變量指向同一個(gè)對(duì)象,會(huì)在棧空間保存有多個(gè)地址,這些地址都是指向這個(gè)對(duì)象,當(dāng)我們把這些變量傳入函數(shù)中運(yùn)行的時(shí)候,其實(shí)都是根據(jù)變量保存的地址,找到對(duì)象,操作同一個(gè)對(duì)象

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、數(shù)組 數(shù)組是一個(gè)有序列表,所以有下標(biāo). 并且數(shù)組在js中可以存在任意類(lèi)型的數(shù)據(jù).并且同一個(gè)數(shù)組中可以存放不同的...
    空谷悠閱讀 560評(píng)論 0 1
  • 一、函數(shù) 1) 作用 封裝一段待執(zhí)行的代碼 2)語(yǔ)法 3)使用 函數(shù)名自定義,見(jiàn)名知意,命名規(guī)范參照變量的命名規(guī)范...
    南坡三舅閱讀 271評(píng)論 0 1
  • 一、DOM 什么是DOM?Document Object Model(文檔對(duì)象模型)。DOM是針對(duì)HTML和XML...
    空谷悠閱讀 1,030評(píng)論 0 2
  • js組成部分:1、ECMAscript 核心語(yǔ)法2、DOM3、BOMjs書(shū)寫(xiě)方式:1、行內(nèi)2、外聯(lián) 、在head...
    每天進(jìn)步一點(diǎn)點(diǎn)5454閱讀 450評(píng)論 0 0
  • 一、 入門(mén) 1、 JS代碼書(shū)寫(xiě)的位置 寫(xiě)在行內(nèi) 寫(xiě)在script標(biāo)簽中 寫(xiě)在外部js文件中,在頁(yè)面引入 注意點(diǎn): ...
    寵辱不驚丶?xì)q月靜好閱讀 928評(píng)論 0 0

友情鏈接更多精彩內(nèi)容