精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
JavaScript框架從入門到精通

文章目錄

    • 靜態(tài)網(wǎng)頁(yè)和動(dòng)態(tài)網(wǎng)頁(yè)
      • 動(dòng)態(tài)網(wǎng)頁(yè)
      • 網(wǎng)頁(yè)是如何和后端交互的呢?
    • JS概述
      • 什么是JS
      • 名詞解釋
      • 特點(diǎn)和優(yōu)勢(shì)
      • 入門案例
    • HTML中引入JS
      • 通過script標(biāo)簽引入JS代碼
      • 通過script標(biāo)簽引入外部的JS文件
    • JS語(yǔ)法
      • 注釋
      • 基本數(shù)據(jù)類型
      • 復(fù)雜數(shù)據(jù)類型
      • JS的變量
      • JS的運(yùn)算符
    • JS語(yǔ)句
      • if..else語(yǔ)句
      • switch…case語(yǔ)句
      • 循環(huán)語(yǔ)句
    • JS數(shù)組
      • JS數(shù)組的聲明方式
      • 數(shù)組需要注意的細(xì)節(jié)
      • 數(shù)組的常見操作
    • JS函數(shù)
      • 方式一:通過function關(guān)鍵字聲明函數(shù)
      • 方式二:通過函數(shù)直接量聲明函數(shù)
    • JS對(duì)象
      • 內(nèi)置對(duì)象
      • 自定義對(duì)象
    • DOM樹的作用
      • 組成
      • DOM樹結(jié)構(gòu)
      • Document對(duì)象
      • dom.html
      • 總結(jié)
    • json
      • 概念
      • 作用
      • 語(yǔ)法
      • 轉(zhuǎn)換工具
      • 測(cè)試
    • ajax
      • 概述
      • 原理
      • 核心對(duì)象XMLHttpRequest
      • 測(cè)試
    • console調(diào)試網(wǎng)頁(yè)
      • Chrome
      • log
      • warn
      • table

靜態(tài)網(wǎng)頁(yè)和動(dòng)態(tài)網(wǎng)頁(yè)

動(dòng)態(tài)網(wǎng)頁(yè)

我們有了html超文本標(biāo)記語(yǔ)言實(shí)現(xiàn)了網(wǎng)站頁(yè)面展現(xiàn),展現(xiàn)文字、表格、圖片、超鏈接等,有了css樣式表實(shí)現(xiàn)了頁(yè)面的美化,這些技術(shù)實(shí)現(xiàn)了靜態(tài)網(wǎng)頁(yè)。

日常展現(xiàn)是已經(jīng)足夠了,但是如果我們要做個(gè)注冊(cè)功能呢?如論壇,我們注冊(cè)個(gè)論壇來(lái)發(fā)文章,聊天。這就帶來(lái)一個(gè)問題,信息如何根據(jù)不同的使用者,展現(xiàn)不同的內(nèi)容呢?再如我注冊(cè)登錄和你注冊(cè)登錄,我們?cè)诰W(wǎng)站上顯示的登錄名稱就不同。這html+css就無(wú)能為力了,它們無(wú)法實(shí)現(xiàn),那誰(shuí)能辦到呢?這時(shí)javascript就派上用場(chǎng)了。它能實(shí)現(xiàn)瀏覽器用戶和后臺(tái)服務(wù)器進(jìn)行交互。注冊(cè)、登錄、添加商品到購(gòu)物車、下訂單對(duì)它而言都是小菜一碟。有了javascript的加入,實(shí)現(xiàn)頁(yè)面和后臺(tái)系統(tǒng)的交互,實(shí)現(xiàn)用戶信息的注冊(cè),實(shí)現(xiàn)用戶的登錄,實(shí)現(xiàn)個(gè)性化的數(shù)據(jù)展現(xiàn),功能強(qiáng)大不老少。業(yè)界把這樣的網(wǎng)頁(yè)稱為動(dòng)態(tài)網(wǎng)頁(yè),把這樣的網(wǎng)站稱為動(dòng)態(tài)網(wǎng)站。

簡(jiǎn)而言之,靜態(tài)網(wǎng)站只能看,不同瀏覽者看到內(nèi)容一致不能變化;動(dòng)態(tài)網(wǎng)站可以讀寫數(shù)據(jù),內(nèi)容根據(jù)不同瀏覽者展示不同的信息。

網(wǎng)頁(yè)是如何和后端交互的呢?

動(dòng)態(tài)網(wǎng)站的軟件架構(gòu)是怎樣的呢?

用戶訪問頁(yè)面,頁(yè)面觸發(fā)事件創(chuàng)建XHR對(duì)象,進(jìn)行ajax請(qǐng)求,請(qǐng)求訪問服務(wù)器端,請(qǐng)求被web中間件攔截并進(jìn)行處理,由控制層框架springmvc中的controller進(jìn)行接收,controller請(qǐng)求業(yè)務(wù)層spring框架的service服務(wù),service請(qǐng)求持久層mybatis框架的mapper映射,mapper訪問數(shù)據(jù)庫(kù)。操作完數(shù)據(jù)庫(kù),返回結(jié)果,mybatis封裝成java對(duì)象傳回service,service把java對(duì)象傳回controller,controller把java對(duì)象又轉(zhuǎn)換為json字符串,然后傳回瀏覽器,瀏覽器傳回給調(diào)用者XHR,XHR調(diào)用回調(diào)方法callback,callback進(jìn)行json字符串的解析,從中拿到要展現(xiàn)的數(shù)據(jù),通過javascript處理,最終回顯到頁(yè)面上。

可以看到這個(gè)調(diào)用過程是非常復(fù)雜的,跨越網(wǎng)絡(luò),跨域多個(gè)服務(wù)器,很多技術(shù)應(yīng)用其中,而這一切的始作俑者是誰(shuí)呢?誰(shuí)讓這一切成為可能,它就是javascript,它實(shí)現(xiàn)了用戶的請(qǐng)求和響應(yīng),實(shí)現(xiàn)了數(shù)據(jù)的動(dòng)態(tài)展現(xiàn),使早期靜態(tài)的網(wǎng)站走向了動(dòng)態(tài)的網(wǎng)站。

JS概述

什么是JS

JavaScript 是 web 前端開發(fā)者必學(xué)的三種語(yǔ)言之一:

  • HTML 定義網(wǎng)頁(yè)的內(nèi)容 H5
  • CSS 規(guī)定網(wǎng)頁(yè)的布局 CSS3
  • JavaScript 實(shí)現(xiàn)網(wǎng)站的交互 ES6

JavaScript在1995年由Netscape公司的Brendan Eich,在網(wǎng)景導(dǎo)航者瀏覽器上首次設(shè)計(jì)實(shí)現(xiàn)而成。因?yàn)镹etscape與Sun合作,Netscape管理層希望它外觀看起來(lái)像Java,因此取名為JavaScript。但實(shí)際上它們根本沒有關(guān)系,java是強(qiáng)語(yǔ)言幾乎無(wú)所不能,而javascript是腳本語(yǔ)言,只局限于瀏覽器。

JavaScript遵循ECMA國(guó)際組織頒布的ECMAScript標(biāo)準(zhǔn)。截至 2012 年,所有瀏覽器都完整的支持ECMAScript 5.1,舊版本的瀏覽器至少支持ECMAScript 3 標(biāo)準(zhǔn)。2015年6月17日,ECMA國(guó)際組織發(fā)布了ECMAScript 的第六版,簡(jiǎn)稱為ES6。它的目標(biāo)是使得JavaScript語(yǔ)言可以用來(lái)編寫復(fù)雜的大型應(yīng)用程序,成為企業(yè)級(jí)開發(fā)語(yǔ)言。很多js相關(guān)技術(shù)都遵循這個(gè)標(biāo)準(zhǔn),如目前最受歡迎的Vue。

微軟出了符合規(guī)范類似javascript的稱為js,但一般開發(fā)者忽略它們的差異,全稱就習(xí)慣叫javascript,簡(jiǎn)稱就習(xí)慣叫js。

全稱JavaScript,是一種弱類型語(yǔ)言,同其他語(yǔ)言一樣,有它自身的語(yǔ)法,數(shù)據(jù)類型,表達(dá)式,算術(shù)運(yùn)算符等。

JS是一門 基于對(duì)象事件驅(qū)動(dòng)腳本語(yǔ)言 ,通常用來(lái)提高網(wǎng)頁(yè)與用戶的交互性。

名詞解釋

基于對(duì)象:它不僅可以創(chuàng)建對(duì)象,也能使用現(xiàn)有的對(duì)象。JS沒有類的概念,也沒有編譯的過程。是一邊解釋一邊執(zhí)行。

事件驅(qū)動(dòng):在JS中,大部分情況下都是通過事件觸發(fā)驅(qū)動(dòng)函數(shù)執(zhí)行的,從而實(shí)現(xiàn)特定的功能。(比如點(diǎn)擊div將內(nèi)容替換為時(shí)間、當(dāng)鼠標(biāo)滑過元素,元素就有翻轉(zhuǎn)的動(dòng)態(tài)。)

腳本語(yǔ)言:在網(wǎng)絡(luò)前端開發(fā)環(huán)境下,用于嵌入在客戶端瀏覽器中的一段小程序。

特點(diǎn)和優(yōu)勢(shì)

特點(diǎn):

(1)JS是一門直譯式的語(yǔ)言,直接執(zhí)行的就是源代碼.

是一邊解釋一邊執(zhí)行,沒有編譯的過程(不像Java需要提前編譯為class文件再運(yùn)行).

(2)JS是一門弱類型的語(yǔ)言,沒有嚴(yán)格的數(shù)據(jù)類型.

優(yōu)勢(shì):

(1)良好的交互性

(2)一定的安全性(JS被強(qiáng)制的要求,不能訪問瀏覽器以外的東西,只能訪問瀏覽器和瀏覽器內(nèi)部的資源)

(3)跨平臺(tái)性(Java語(yǔ)言具有跨平臺(tái)性,是因?yàn)橛刑摂M機(jī))

只要有瀏覽器的地方都能執(zhí)行JS

入門案例

<head>
    <title>hello</title>
	<meta charset='utf-8'/>
	<script>/* JS代碼 */
alert(100);
		function fn(){
			alert('111');
		}
	</script>
</head>
<body>
	<a href='#' onclick='fn();'>鼠標(biāo)點(diǎn)擊事件...</a>
</body>

HTML中引入JS

通過script標(biāo)簽引入JS代碼

<head>
	<meta charset='utf-8'/>
	<script>/* JS代碼 */
		function fn(){
			alert('JS的第1種引入方式');
		}
	</script>
</head>
<body>
	<div id='div1' onclick='fn();'>Hello JavaScript</div>
</body>

通過script標(biāo)簽引入外部的JS文件

創(chuàng)建1.js文件

function fn(){
	alert('JS的第2種引入方式');
}

在html中引入文件

<head>
	<meta charset='utf-8'/>
	<script src='1.js'> </script>
</head>
<body>
	<div id='div1' onclick='fn();'>Hello JavaScript</div>
</body>

注意:不要同時(shí)通過一個(gè)script標(biāo)簽引入JS代碼和JS文件,會(huì)導(dǎo)致代碼不會(huì)執(zhí)行!比如:

<script src='demo1.js'>
	alert('哈哈哈哈。。。');//代碼不會(huì)執(zhí)行!!
</script>

JS語(yǔ)法

注釋

單行注釋: //注釋內(nèi)容

多行注釋: /* 注釋內(nèi)容 */

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

包括:number/string/boolean/null/undefined

(1) 數(shù)值類型-number

在JS中,數(shù)值類型只有一種,就是浮點(diǎn)型。

在JS中,需要時(shí)會(huì)自動(dòng)的進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換,比如:在顯示和處理的時(shí)候,浮點(diǎn)型和整型會(huì)自動(dòng)的轉(zhuǎn)換。

2.4+3.6=6;

Infinity : 正無(wú)窮大

-Infinity : 負(fù)無(wú)窮大

NaN : Not a Number 非數(shù)字, 和任何值都不相等,包括它本身

(2) 字符串類型-string

在JS中,字符串是基本數(shù)據(jù)類型。

在JS中,字符串直接量是通過單引號(hào)或者雙引號(hào)引起來(lái)。


var str1 = 'Hello…';

var str2 = 'CGB2103…';;

alert(str1);

(3) 布爾類型-boolean

值為true或者是false;

var s1 = false;

console.log(s1);

(4) undefined

值只有一個(gè)就是undefined。表示變量沒有初始化值。

比如:

a) var num; alert(num);//聲明了變量但是沒有為變量賦值,該變量的值就是undefined。

b) 或者訪問一個(gè)對(duì)象上不存在的屬性時(shí),也是undefined。

c) 或者訪問數(shù)組中一個(gè)沒有的元素的位置時(shí),該位置處的值也是undefined.

(5) null

值也只有一個(gè),就是null。表示空值或者不存在的對(duì)象。

復(fù)雜數(shù)據(jù)類型

函數(shù)、數(shù)組、對(duì)象(自定義對(duì)象、內(nèi)置對(duì)象、DOM對(duì)象、BOM對(duì)象…)

JS的變量

js是弱類型語(yǔ)言,所有類型的變量都是用var關(guān)鍵字定義。并且參數(shù)的類型可以隨時(shí)轉(zhuǎn)換。

javascript沒有類似采用靜態(tài)語(yǔ)言類型,如java的變量類型是編譯期就確定的;而它采用了動(dòng)態(tài)類型,也就是說在編譯期類型不確定,運(yùn)行時(shí)會(huì)動(dòng)態(tài)根據(jù)變量的賦值來(lái)決定它的類型,這點(diǎn)比較靈活。這也是雙刃劍,編譯期就難以檢查出其賦值的錯(cuò)誤。

練習(xí):變量交換

(1) 在JS中是通過 var 關(guān)鍵字來(lái)聲明一個(gè)變量

var a=1; alert(a);

var x=true; alert(x);

var y=10.8; alert(y);

(2) 在JS中聲明的變量是不區(qū)分類型的, 可以指向任意的數(shù)據(jù)類型。

var a = 1;
a=true;
a=100;
alert(a);//100

function x(){
	var m = 10;
	alert('局部變量:'+m);
	alert('全局變量:'+a);
}
alert('局部變量2:'+m);//局部變量失效,報(bào)錯(cuò)

JS的運(yùn)算符

JS中的運(yùn)算符和Java中的運(yùn)算符大致相同

算術(shù)運(yùn)算符: +,-,*,/,%,++,–

賦值運(yùn)算符: =,+=,-=,*=,/=,%=

比較運(yùn)算符: ==,!=, =,!, > ,< ,>=,<=

位運(yùn)算符: & , |

邏輯運(yùn)算符: &&,||

前置邏輯運(yùn)算符: ! (not)

三元運(yùn)算符: ? :

常見運(yùn)算符測(cè)試

var a = 3;
var b = 1;
console.log(a+b);//4
a+=4;
console.log(a+b);//8
//a+=4;
console.log(a==b); //true
console.log(a==='3'); //false  如果兩邊比較的值不是同一種數(shù)據(jù)類型,===直接返回false,如果是同一種數(shù)據(jù)類型,==和===沒有區(qū)別!
console.log('1'=='1'); //true   //由于JS中字符串是基本數(shù)據(jù)類型,比較字符串相等通過 == 進(jìn)行!
var a = 1;
alert(a++);//1
alert(++a);//3
alert(++a+a+++a);//4+4+5
alert(a>3?10:8);
var b = 10;
alert(a>b?a:b);//求兩個(gè)數(shù)里的大數(shù)
var c = 8;
var d = a>b?(a>c?a:c):(b>c?b:c);
alert(d);//三個(gè)數(shù)里的大值

typeof運(yùn)算符: 用于返回變量或者表達(dá)式 的數(shù)據(jù)類型

var i = 3;
console.log(typeof i);//number
i=true;
console.log(typeof i);//boolean
i='hello';
console.log(typeof i);//string
console.log(typeof 123+'abc');//numberabc
console.log(typeof (123+'abc'));//string

JS語(yǔ)句

JS中的語(yǔ)句和Java中的語(yǔ)句用法也大致相同

if…else語(yǔ)句

var i = 3;
if(i==4){
alert(“yes”);
}else{
alert(“no”);//no
}
例子: 接收用戶輸入的成績(jī),判斷成績(jī)所屬的等級(jí)
80~100(包括80,也包括100)		優(yōu)秀 
60~80(包括60,但不包括80)		中等
0~60(包括0,但不包括60)		不及格
其他值							輸入有誤
// prompt函數(shù)可以彈框提示用戶輸入成績(jī), 并返回用戶輸入的內(nèi)容
var score = prompt('請(qǐng)輸入您的成績(jī):');
console.log( score );
if( score >= 80 && score <=100 ){
	alert('您的成績(jī)屬于:優(yōu)秀!');
}else if( score >= 60 && score < 80 ){
	alert('您的成績(jī)屬于:中等!');
}else if( score >= 0 && score < 60 ){
	alert('您的成績(jī)屬于:不及格!');
}else{
	alert('您輸入的成績(jī)不合法,請(qǐng)重新輸入!');
}

switch…case語(yǔ)句

var day = 3;
switch( day ){
	case 1: 
		alert('今天是星期一');
		break;
	case 2: 
		alert('今天是星期二');
		break;
	case 3: 
		alert('今天是星期三');
		break;
	case 4: 
		alert('今天是星期四');
		break;
	case 5: 
		alert('今天是星期五');
		break;
}

循環(huán)語(yǔ)句

for(var i=0;i<5;i++){
	alert( i );
console.log(i);
}
var i=0;
while(i<5){
alert(i);
i++;
}
var sum = 0;
for( var i=1; i<=100; i++ ){
	sum += i; //sum = sum+i;
}
console.log(sum );
//沒有增強(qiáng)for循環(huán)

注意: JS中的語(yǔ)句,判斷條件可以不是boolean類型,因?yàn)镴S中會(huì)自動(dòng)進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換。

JS數(shù)組

JS數(shù)組用于在單個(gè)的變量中存儲(chǔ)多個(gè)值(其實(shí)就是一個(gè)容器)。

JS中的數(shù)組可以存儲(chǔ)例如:數(shù)值、字符串、布爾值、undefined、null、對(duì)象、函數(shù)等

JS數(shù)組的聲明方式

var arr1 = new Array();//聲明一個(gè)空數(shù)組
var arr2 = new Array('abc', 'hello', true);//聲明一個(gè)具有初始值的數(shù)組
alert(arr2.length);//3
var arr4 = [];//聲明一個(gè)空數(shù)組
alert(arr4.length);//0
arr4 = ['abc', 'hello', true];//聲明一個(gè)具有初始值的數(shù)組
alert(arr4);

數(shù)組需要注意的細(xì)節(jié)

(1)JS數(shù)組中可以存放任意的數(shù)據(jù)類型

(2)JS中的數(shù)組長(zhǎng)度可以被改變

var arr1 = [];//聲明一個(gè)空數(shù)組
console.log( arr1.length ); //此時(shí)數(shù)組長(zhǎng)度為 0
arr1.length = 10;
console.log( arr1.length ); //此時(shí)數(shù)組長(zhǎng)度為 10
arr1[99] = 'abc';
console.log( arr1.length ); //此時(shí)數(shù)組長(zhǎng)度為 100
arr1.length = 0;
console.log( arr1.length ); //此時(shí)數(shù)組長(zhǎng)度為 0

數(shù)組的常見操作

length屬性  --  獲取數(shù)組的長(zhǎng)度,還可以改變數(shù)組的長(zhǎng)度
var a = [1,2,3];  
alert(a.length);  

var arr = [123, 'abc', false, new Object() ]
//遍歷數(shù)組
for( var i=0; i< arr.length; i++ ){
	console.log( arr[i] ); 
}
//for..in
for(var i in a){
	console.log('i:::'+i);
}
//循環(huán)接收用戶輸入,將數(shù)據(jù)存儲(chǔ)在數(shù)組中,直至輸入'exit’結(jié)束
c();
function c(){
	var a=[];
	for(;;){
		var x=prompt('請(qǐng)輸入整數(shù):');
		a[a.length]=x; 
		if(x=='exit'){
			break;
		}
	}
	console.log(a);
}

JS函數(shù)

函數(shù)就是一個(gè)具有功能的代碼塊, 可以反復(fù)調(diào)用

函數(shù)就是包裹在花括號(hào)中的代碼塊,前面使用了關(guān)鍵詞 function

方式一:通過function關(guān)鍵字聲明函數(shù)

聲明:function 函數(shù)名稱([參數(shù)列表]){ 函數(shù)體 }
調(diào)用: 函數(shù)名稱([參數(shù)列表]);
案例:
function a(){ //無(wú)參函數(shù)定義
	var a = [1,2,3,4,5]; //定義數(shù)組
	var sum =0; //定義變量
	for (var i = 0; i <a.length; i++) {
		if(a[i]%2==0){
			sum+=a[i];
		}
	}
	alert(sum);
}
a();//函數(shù)調(diào)用
function b(x,y){//定義含參函數(shù)
	alert(x+y);
}
b(1,'2');//函數(shù)調(diào)用
b(1,2);//函數(shù)調(diào)用

方式二:通過函數(shù)直接量聲明函數(shù)

聲明:var 函數(shù)名稱 = function([參數(shù)列表]){ 函數(shù)體 }
調(diào)用: 函數(shù)名稱([參數(shù)列表]);
案例:
// fn2();  //這種方式定義的函數(shù)還未加載就調(diào)用,會(huì)報(bào)錯(cuò).方式1沒問題
var fn2 = function(){ //定義無(wú)參函數(shù)
	alert(100);
}
fn2();  //函數(shù)調(diào)用

var fn3 = function(x,y){  //定義含參函數(shù)
	alert(x*y);
}
fn3(0.32,100);//函數(shù)調(diào)用
fn2('王海濤');參數(shù)個(gè)數(shù)不匹配,王海濤undefined
var e = function(x,y){ //定義有返回值含參函數(shù)
	return x-y;
}
alert('函數(shù)返回值:::'+ e(1.1,10.9) ); //函數(shù)調(diào)用

注意: 在JS中調(diào)用函數(shù)時(shí), 傳遞的參數(shù)個(gè)數(shù)如果與聲明的參數(shù)個(gè)數(shù)不相同, 也不會(huì)報(bào)錯(cuò)。

但是最好按聲明的個(gè)數(shù)來(lái)傳遞, 因?yàn)閭€(gè)數(shù)不符, 可能會(huì)引發(fā)一些問題!!!

JS對(duì)象

利用function關(guān)鍵字聲明對(duì)象,用new關(guān)鍵字創(chuàng)建對(duì)象。

內(nèi)置對(duì)象

String/Array/Number/Math/JSON…

Window對(duì)象–代表瀏覽器中一個(gè)打開的窗口,了解一下即可,很多被UI替代

//String對(duì)象的功能
let a = 'javascript';
console.log( a.length ); //獲取字符串的長(zhǎng)度
console.log( a.toUpperCase() ); //全轉(zhuǎn)大寫
let b = a.substring(1,5); //截取字符串[1,5)
console.log( b ); 
console.log( a.concat('hello ~') );  //拼串
//Math對(duì)象
console.log( Math.PI );//π的值
console.log( Math.random() ); //隨機(jī)數(shù)0~1
console.log( Math.random() * 10 );
console.log( Math.round(1.9) );//對(duì)小數(shù)的處理,round四舍五入
console.log( Math.round(1.1) );//對(duì)小數(shù)的處理,round四舍五入
//Array對(duì)象
let c = [3,21,4,5,2];
console.log( c );
console.log( c.toString() );//打印數(shù)組里的數(shù)據(jù)
console.log( c.sort() ); //對(duì)數(shù)組排序
//window對(duì)象--可以省略
window.alert(100);//彈出框
window.prompt(); //輸入框
window.confirm() ;//確認(rèn)框

Document對(duì)象–代表整個(gè)HTML文檔,可用來(lái)訪問頁(yè)面中的所有元素

document.write()               	動(dòng)態(tài)向頁(yè)面寫入內(nèi)容
document.getElementById(id)  		獲得指定id值的元素
document.getElementsByName(name)	獲得指定Name值的元素

學(xué)會(huì)簡(jiǎn)單使用,后期被jQuery封裝,在后期被Vue框架封裝

自定義對(duì)象

(1)方式一:

  1. 聲明對(duì)象:function Person(){}
  2. 創(chuàng)建對(duì)象:var p1 = new Person();
  3. 設(shè)置屬性:p1.name = '張飛'; p1.age = 18;
  4. 設(shè)置方法:p1.run = function(){ alert(this.name+' : '+this.age); }
  5. 訪問p1對(duì)象:
/* 自定義對(duì)象*/
function Person(){ } /* 定義對(duì)象*/ 
var p1 = new Person(); /* 創(chuàng)建對(duì)象*/
p1.name='張三';
p1.age=20;
console.log(p1);  
p1.say = function(){ /* 定義函數(shù)*/
console.log('haha');
}
p1.say(); /* 函數(shù)調(diào)用*/
上面展示了js的強(qiáng)大!js的牛掰之處就在于,它的屬性可以邊寫邊創(chuàng)建,非常靈活,而java不行,必須先定義。

上面展示了js的強(qiáng)大!js的牛掰之處就在于,它的屬性可以邊寫邊創(chuàng)建,非常靈活,而java不行,必須先定義。

(2)方式二:

var p2 = {
		'pname':'李四',
		'page':100,
		'psay':function(){
			/* this使用p2里定義的 */
			console.log(this.pname+this.page);
		}
	}
	console.log(p2);
	p2.psay();  /* 函數(shù)調(diào)用*/

DOM樹的作用

組成

  • ECMAScript描述了javascript語(yǔ)言的語(yǔ)法和基本對(duì)象
  • 文檔對(duì)象模型DOM(Document Object Model)與HTML網(wǎng)頁(yè)API接口
  • 瀏覽器對(duì)象模型BOM(Browser Object Model),與瀏覽器進(jìn)行交互的API接口

核心對(duì)象有:window瀏覽器窗口,navigator瀏覽器信息,location瀏覽器當(dāng)前地址信息,history瀏覽器歷史信息,screen用戶屏幕信息。

DOM非常重要,實(shí)際開發(fā)更多通過js操作DOM對(duì)象實(shí)現(xiàn)對(duì)html頁(yè)面的操作,BOM也用,比較少用。所以學(xué)習(xí)重點(diǎn)放在DOM上。

DOM樹結(jié)構(gòu)

DOM 是一項(xiàng) W3C (World Wide Web Consortium) 標(biāo)準(zhǔn),DOM(Document Object Model)文檔對(duì)象模型為JS操作html文檔所提供的一套API,通過這套API可以很方便的對(duì)html元素進(jìn)行訪問及增刪改查操作。

Document對(duì)象

--獲取對(duì)象: window.document
--調(diào)用方法: 
		getElementById('元素的id的屬性的值')--返回1個(gè)元素
		getElementsByName('元素的name屬性的值')--返回多個(gè)元素(用數(shù)組)
		getElementsByClassName('元素的class屬性的值')--返回多個(gè)元素(用數(shù)組)
		getElementsByTagName('元素的標(biāo)簽名的值')--返回多個(gè)元素(用數(shù)組)
write()--向文檔寫 HTML 表達(dá)式 或 JavaScript 代碼
title--返回網(wǎng)頁(yè)的標(biāo)題
id--設(shè)置或返回元素的id
innerHTML--設(shè)置或返回元素的內(nèi)容

dom.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset='utf-8'>
		<title>DOM解析</title>

		<!-- js -->
		<script>
			function a(){
				/* 按id獲取,返回1個(gè) */
				var x = document.getElementById('div1');
				x.innerHTML='<h1>你好div</h1>';
				
				/* 按name屬性值獲取,返回多個(gè)*/
				var y = document.getElementsByName('div2'); 
				console.log(y);//NodeList
				y[0].innerHTML='hello js...';
				
				/* 按class屬性值獲取,返回多個(gè)*/
				var z = document.getElementsByClassName('span1');
				console.log(z);//HTMLCollection
				z[0].innerText='<p>我變了</p>'
				
				/* 按照標(biāo)簽名獲取,返回多個(gè) */
				var m = document.getElementsByTagName('div');
				console.log(m);//HTMLCollection
				m[1].style.fontSize=30+'px';
			}
		</script>
	</head>
	<body>
		<div id='div1' onclick='a();'>我是div1</div>
		<div name='div2'  onclick='a();'>我是div2</div>
		<span class='span1'>我是span1</span>
		<span class='span1'>我是span2</span>
		<a name='div2' id='a1'>我是a</a>

		<!-- js事件: -->
<a href='#' onclick='method();'>單擊觸發(fā)js</a>
		<a href='#' ondblclick='method2();'>雙擊觸發(fā)js</a>
		<a href='#' onmouseenter='method3();'>滑過觸發(fā)js</a>
		<a href='#' onmouseleave='method4();'>滑走觸發(fā)js</a>
<button onkeydown='alert(1);'>點(diǎn)我</button>
	</body>
</html>

總結(jié)

獲取頁(yè)面元素的4種方式:

  • getElementsByTagName 標(biāo)簽名稱,得到數(shù)組
  • getElementsByName name屬性,得到數(shù)組
  • getElementsByClassName class屬性,得到數(shù)組
  • getElementById id屬性,單個(gè)值

注:dom樹在描述標(biāo)簽時(shí)除id方式,其它都是以數(shù)組形式體現(xiàn),哪怕是一個(gè)元素。

json

概念

ajax往往要完整應(yīng)用還會(huì)配合一個(gè)技術(shù):JSON,那什么是JSON呢?

JSON 指的是 JavaScript 對(duì)象表示法(JavaScript Object Notation)

JSON(JavaScript Object Notation,JS 對(duì)象簡(jiǎn)譜) 起名不咋地,非常拗口,我們就記住它是一種輕量級(jí)的數(shù)據(jù)交換格式即可。它基于 ECMAScript (js規(guī)范)的一個(gè)子集,采用完全獨(dú)立于編程語(yǔ)言的文本格式來(lái)存儲(chǔ)和表示數(shù)據(jù)。簡(jiǎn)潔和清晰的層次結(jié)構(gòu)使得 JSON 成為理想的數(shù)據(jù)交換語(yǔ)言。是xml的終結(jié)者,成為主流開發(fā)方式(ajax異步請(qǐng)求,json返回)。

作用

JSON 是存儲(chǔ)和交換文本信息的語(yǔ)法。當(dāng)數(shù)據(jù)在瀏覽器與服務(wù)器之間進(jìn)行交換時(shí),這些數(shù)據(jù)只能是文本。JSON 屬于文本,并且我們能夠把任何 JavaScript 對(duì)象轉(zhuǎn)換為 JSON,然后將 JSON 發(fā)送到服務(wù)器。我們也能把從服務(wù)器接收到的任何 JSON 轉(zhuǎn)換為 JavaScript 對(duì)象。以這樣的方式,我們能夠把數(shù)據(jù)作為 JavaScript 對(duì)象來(lái)處理,無(wú)需復(fù)雜的解析和轉(zhuǎn)譯。

語(yǔ)法

JSON數(shù)據(jù):

var a =' 'firstName' : 'John' ' 

JSON 對(duì)象:

var a = '{ 'firstName':'John' , 'lastName':'Doe' }'

JSON 數(shù)組:

var a = '[{ 'firstName':'Bill' , 'lastName':'Gates' },{ 'firstName':'George' , 'lastName':'Bush' }]';

轉(zhuǎn)換工具

使用JS里的內(nèi)置對(duì)象JSON.用來(lái)把以 JSON 格式寫的字符串 和 原生 JavaScript 對(duì)象互轉(zhuǎn).

給服務(wù)器發(fā)送數(shù)據(jù):JS對(duì)象轉(zhuǎn)成JSON字符串 	JSON.stringify(Js對(duì)象)
接受服務(wù)器的數(shù)據(jù): JSON字符串轉(zhuǎn)成JS對(duì)象		JSON.parse('json字符串')

測(cè)試

<!DOCTYPE html>
<html>
	<head>
		<meta charset='utf-8'>
		<title>json</title>
		<script>
			//json用來(lái)在瀏覽器和服務(wù)器之間做數(shù)據(jù)傳輸,輕量級(jí),格式簡(jiǎn)單明了.
			//JSON是js的內(nèi)置對(duì)象,用來(lái)把json類型的字符串和js對(duì)象互轉(zhuǎn)
			//json類型的字符串---{ 'k1':'v1', 'k2':'v2', 'k3':'v3' }
			function jschuan(){
				var jsonchuan = '{ 'k1':'v1', 'k2':'v2', 'k3':'v3' }';
				document.getElementById('h').innerHTML=jsonchuan;
			}
			function chuan2js(){
				var text='{ 'k1':'v1', 'k2':'v2', 'k3':'v3' }';
				console.log(text);
		//從服務(wù)器收到的數(shù)據(jù)都是字符串,轉(zhuǎn)成js對(duì)象,用js語(yǔ)法解析屬性/方法
	var jsobj = JSON.parse(text);//串轉(zhuǎn)js對(duì)象,就可以寫js代碼解析數(shù)據(jù)
				console.log(jsobj);
				document.getElementById('d').innerHTML=jsobj.k2;
			}
			function js2chuan(){
				var obj = {'k1':'v1', 'k2':'v2', 'k3':'v3'};
				console.log(obj);
				//把瀏覽器的數(shù)據(jù)發(fā)給服務(wù)器,服務(wù)器只要json串
				var text = JSON.stringify(obj);//js對(duì)象轉(zhuǎn)成串
				document.getElementById('p1').innerHTML=text;
				console.log(text);
				console.log(text.length);
			}
		</script>
	</head>
	<body>
		<p id='p1' onclick='js2chuan();'>我是p</p>
		<div id='d' onclick='chuan2js();'>我是div</div>
		<h1 id='h' onclick='jschuan();'>我是h1哦</h1>
	</body>
</html>

ajax

概述

AJAX = Asynchronous JavaScript And XML. AJAX 并非編程語(yǔ)言。
Ajax 允許通過與場(chǎng)景后面的 Web 服務(wù)器交換數(shù)據(jù)來(lái)異步更新網(wǎng)頁(yè)。這意味著可以更新網(wǎng)頁(yè)的部分,而不需要重新加載整個(gè)頁(yè)面。

原理

核心對(duì)象XMLHttpRequest

所有現(xiàn)代瀏覽器都支持 XMLHttpRequest 對(duì)象。
XMLHttpRequest 對(duì)象用于同幕后服務(wù)器交換數(shù)據(jù)。這意味著可以更新網(wǎng)頁(yè)的部分,而不需要重新加載整個(gè)頁(yè)面。


測(cè)試


<!DOCTYPE html>
<html>
	<head>
		<meta charset='utf-8'>
		<title>ajax-js版</title>
		<script>
			function change(){
				// 1. 創(chuàng)建xhr對(duì)象,用于同幕后服務(wù)器交換數(shù)據(jù)
				var xhr = new XMLHttpRequest();
				// 2. 定義當(dāng) readyState 屬性發(fā)生變化時(shí)被調(diào)用的函數(shù)
				xhr.onreadystatechange=function(){
					//3. status是200表示請(qǐng)求成功,readyState是4表示請(qǐng)求已完成且響應(yīng)已就緒
					if(this.status==200 && this.readyState==4){
						// document.getElementById('d1').innerHTML='hi ajax';
						//5.以字符串返回響應(yīng)數(shù)據(jù),并展示
						document.getElementById('d1').innerHTML=this.responseText;
					}
				}
				//3.規(guī)定請(qǐng)求的類型(請(qǐng)求方式,文件位置,異步)
				xhr.open('get','1.json',true);
				//xhr.open('get','http://localhost:8080/car/get',true);
				//4.xhr將請(qǐng)求發(fā)送到服務(wù)器
				xhr.send();
			}
		</script>
	</head>
	<body>
		<!-- 點(diǎn)擊時(shí),使用ajax修改文字 -->
		<div id='d1' onclick='change()'>你好</div>
	</body>
</html>

console調(diào)試網(wǎng)頁(yè)

Chrome

專業(yè)人用專業(yè)的工具,瀏覽器調(diào)試谷歌、火狐最佳,使用F12打開調(diào)試窗口。也可以快捷鍵打開:ctrl+shift+i。

  • 支持自動(dòng)補(bǔ)全,提示下,按tab鍵補(bǔ)全
  • 清除日志
  • Console控制臺(tái)菜單

log

warn

table

以表格形式展現(xiàn):

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
JavaScript學(xué)習(xí)
JSON的自定義序列化和解析
JavaScript基礎(chǔ)學(xué)習(xí)目錄
12個(gè)常規(guī)前端面試題及小結(jié)
json數(shù)據(jù)在前端(javascript)和后端(php)轉(zhuǎn)換
JavaScript基本語(yǔ)法(全)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

主站蜘蛛池模板: 鸡泽县| 连山| 天柱县| 广宁县| 桂阳县| 子长县| 鄢陵县| 永川市| 宣威市| 乐清市| 绥阳县| 凤庆县| 武鸣县| 舞钢市| 波密县| 即墨市| 毕节市| 嘉鱼县| 阳朔县| 大邑县| 炉霍县| 长岭县| 喜德县| 蚌埠市| 莎车县| 英吉沙县| 榆林市| 高清| 奉贤区| 南通市| 塔城市| 买车| 建湖县| 灵宝市| 武宁县| 弥渡县| 屯门区| 泾川县| 崇州市| 廊坊市| 柘荣县|