pythonjavascript一起开发_Python开发【第十一篇】:JavaScript
JavaScript是一門編程語言,瀏覽器內(nèi)置了JavaScript語言的解釋器,所以在瀏覽器上按照JavaScript語言的規(guī)則編寫相應(yīng)代碼之,瀏覽器可以解釋并做出相應(yīng)的處理。
一、如何編寫
1、JavaScript代碼存在形式
Js代碼內(nèi)容
2、JavaScript代碼存放位置
HTML的head中
HTML的body代碼塊底部(推薦)
由于Html代碼是從上到下執(zhí)行,如果Head中的js代碼耗時嚴重,就會導(dǎo)致用戶長時間無法看到頁面,如果放置在body代碼塊底部,那么即使js代碼耗時嚴重,也不會影響用戶看到頁面效果,只是js實現(xiàn)特效慢而已。
alert('123');
二、變量
JavaScript中變量的聲明是一個非常容易出錯的點,局部變量必須一個 var 開頭,如果未使用var,則默認表示聲明的是全局變量。
// 全局變量
name = 'seven';
function func(){
// 局部變量
var age = 18;
// 全局變量
gender = "男"
}
JavaScript中代碼注釋:
單行 //
多行 /* ?*/
注意:此注釋僅在Script塊中生效。
三、數(shù)據(jù)類型
JavaScript 中的數(shù)據(jù)類型分為原始類型和對象類型:
原始類型
數(shù)字
字符串
布爾值
對象類型
數(shù)組
“字典”
...
特別的,數(shù)字、布爾值、null、undefined、字符串是不可變。
//null、undefined
null是JavaScript語言的關(guān)鍵字,它表示一個特殊值,常用來描述“空值”。
undefined是一個特殊值,表示變量未定義。
null和undefined
1、數(shù)字(Number)
JavaScript中不區(qū)分整數(shù)值和浮點數(shù)值,JavaScript中所有數(shù)字均用浮點數(shù)值表示。
轉(zhuǎn)換:
parseInt(..) ? ?將某值轉(zhuǎn)換成數(shù)字,不成功則NaN
parseFloat(..)?將某值轉(zhuǎn)換成浮點數(shù),不成功則NaN
特殊值:
NaN,非數(shù)字。可使用 isNaN(num) 來判斷。
Infinity,無窮大。可使用 isFinite(num) 來判斷。
更多數(shù)值計算:
常量
Math.E
常量e,自然對數(shù)的底數(shù)。
Math.LN10
10的自然對數(shù)。
Math.LN2
2的自然對數(shù)。
Math.LOG10E
以10為底的e的對數(shù)。
Math.LOG2E
以2為底的e的對數(shù)。
Math.PI
常量figs/U03C0.gif。
Math.SQRT1_2
2的平方根除以1。
Math.SQRT2
2的平方根。
靜態(tài)函數(shù)
Math.abs( )
計算絕對值。
Math.acos( )
計算反余弦值。
Math.asin( )
計算反正弦值。
Math.atan( )
計算反正切值。
Math.atan2( )
計算從X軸到一個點的角度。
Math.ceil( )
對一個數(shù)上舍入。
Math.cos( )
計算余弦值。
Math.exp( )
計算e的指數(shù)。
Math.floor( )
對一個數(shù)下舍人。
Math.log( )
計算自然對數(shù)。
Math.max( )
返回兩個數(shù)中較大的一個。
Math.min( )
返回兩個數(shù)中較小的一個。
Math.pow( )
計算xy。
Math.random( )
計算一個隨機數(shù)。
Math.round( )
舍入為最接近的整數(shù)。
Math.sin( )
計算正弦值。
Math.sqrt( )
計算平方根。
Math.tan( )
計算正切值。
Math
2、字符串(String)
字符串是由字符組成的數(shù)組,但在JavaScript中字符串是不可變的:可以訪問字符串任意位置的文本,但是JavaScript并未提供修改已知字符串內(nèi)容的方法。
常見功能:
obj.length 長度
obj.trim() 移除空白
obj.trimLeft()
obj.trimRight)
obj.charAt(n) 返回字符串中的第n個字符
obj.concat(value, ...) 拼接
obj.indexOf(substring,start) 子序列位置
obj.lastIndexOf(substring,start) 子序列位置
obj.substring(from, to) 根據(jù)索引獲取子序列
obj.slice(start, end) 切片
obj.toLowerCase() 大寫
obj.toUpperCase() 小寫
obj.split(delimiter, limit) 分割
obj.search(regexp) 從頭開始匹配,返回匹配成功的第一個位置(g無效)
obj.match(regexp) 全局搜索,如果正則中有g(shù)表示找到全部,否則只找到第一個。
obj.replace(regexp, replacement) 替換,正則中有g(shù)則替換所有,否則只替換第一個匹配項,
$數(shù)字:匹配的第n個組內(nèi)容;
$&:當前匹配的內(nèi)容;
$`:位于匹配子串左側(cè)的文本;
$':位于匹配子串右側(cè)的文本
$$:直接量$符號
3、布爾類型(Boolean)
布爾類型僅包含真假,與Python不同的是其首字母小寫。
== ? ? ?比較值相等
!= ? ? ? 不等于
=== ? 比較值和類型相等
!=== ?不等于
|| ? ? ? ?或
&& ? ? ?且
4、數(shù)組
JavaScript中的數(shù)組類似于Python中的列表
常見功能:
obj.length 數(shù)組的大小
obj.push(ele) 尾部追加元素
obj.pop() 尾部獲取一個元素
obj.unshift(ele) 頭部插入元素
obj.shift() 頭部移除元素
obj.splice(start, deleteCount, value, ...) 插入、刪除或替換數(shù)組的元素
obj.splice(n,0,val) 指定位置插入元素
obj.splice(n,1,val) 指定位置替換元素
obj.splice(n,1) 指定位置刪除元素
obj.slice( ) 切片
obj.reverse( ) 反轉(zhuǎn)
obj.join(sep) 將數(shù)組元素連接起來以構(gòu)建一個字符串
obj.concat(val,..) 連接數(shù)組
obj.sort( ) 對數(shù)組元素進行排序
四、其他
1、序列化
JSON.stringify(obj) ? 序列化
JSON.parse(str) ? ? ? ?反序列化
2、轉(zhuǎn)義
decodeURI( ) ? ? ? ? ? ? ? ? ? URl中未轉(zhuǎn)義的字符
decodeURIComponent( ) ? URI組件中的未轉(zhuǎn)義字符
encodeURI( ) ? ? ? ? ? ? ? ? ? URI中的轉(zhuǎn)義字符
encodeURIComponent( ) ? 轉(zhuǎn)義URI組件中的字符
escape( ) ? ? ? ? ? ? ? ? ? ? ? ? 對字符串轉(zhuǎn)義
unescape( ) ? ? ? ? ? ? ? ? ? ? 給轉(zhuǎn)義字符串解碼
URIError ? ? ? ? ? ? ? ? ? ? ? ? 由URl的編碼和解碼方法拋出
3、eval
JavaScript中的eval是Python中eval和exec的合集,既可以編譯代碼也可以獲取返回值。
eval()
EvalError ? 執(zhí)行字符串中的JavaScript代碼
4、正則表達式
1、定義正則表達式
/.../ ?用于定義正則表達式
/.../g 表示全局匹配
/.../i 表示不區(qū)分大小寫
/.../m 表示多行匹配
JS正則匹配時本身就是支持多行,此處多行匹配只是影響正則表達式^和$,m模式也會使用^$來匹配換行的內(nèi)容)
var pattern = /^Java\w*/gm;
var text = "JavaScript is more fun than \nJavaEE or JavaBeans!";
result = pattern.exec(text)
result = pattern.exec(text)
result = pattern.exec(text)
注:定義正則表達式也可以??reg= new RegExp()
2、匹配
JavaScript中支持正則表達式,其主要提供了兩個功能:
test(string) ? ??檢查字符串中是否和正則匹配
n = 'uui99sdf'
reg = /\d+/
reg.test(n) ---> true
# 只要正則在字符串中存在就匹配,如果想要開頭和結(jié)尾匹配的話,就需要在正則前后加 ^和$
exec(string) ? ?獲取正則表達式匹配的內(nèi)容,如果未匹配,值為null,否則,獲取匹配成功的數(shù)組。
獲取正則表達式匹配的內(nèi)容,如果未匹配,值為null,否則,獲取匹配成功的數(shù)組。
非全局模式
獲取匹配結(jié)果數(shù)組,注意:第一個元素是第一個匹配的結(jié)果,后面元素是正則子匹配(正則內(nèi)容分組匹配)
var pattern = /\bJava\w*\b/;
var text = "JavaScript is more fun than Java or JavaBeans!";
result = pattern.exec(text)
var pattern = /\b(Java)\w*\b/;
var text = "JavaScript is more fun than Java or JavaBeans!";
result = pattern.exec(text)
全局模式
需要反復(fù)調(diào)用exec方法,來一個一個獲取結(jié)果,直到匹配獲取結(jié)果為null表示獲取完畢
var pattern = /\bJava\w*\b/g;
var text = "JavaScript is more fun than Java or JavaBeans!";
result = pattern.exec(text)
var pattern = /\b(Java)\w*\b/g;
var text = "JavaScript is more fun than Java or JavaBeans!";
result = pattern.exec(text)
3、字符串中相關(guān)方法
obj.search(regexp) 獲取索引位置,搜索整個字符串,返回匹配成功的第一個位置(g模式無效)
obj.match(regexp) 獲取匹配內(nèi)容,搜索整個字符串,獲取找到第一個匹配內(nèi)容,如果正則是g模式找到全部
obj.replace(regexp, replacement) 替換匹配替換,正則中有g(shù)則替換所有,否則只替換第一個匹配項,
$數(shù)字:匹配的第n個組內(nèi)容;
$&:當前匹配的內(nèi)容;
$`:位于匹配子串左側(cè)的文本;
$':位于匹配子串右側(cè)的文本
$$:直接量$符號
5、時間處理
JavaScript中提供了時間相關(guān)的操作,時間操作中分為兩種時間:
時間統(tǒng)一時間
本地時間(東8區(qū))
更多操作參見:http://www.shouce.ren/api/javascript/main.html
五、語句和異常
1、條件語句
JavaScript中支持兩個中條件語句,分別是:if 和 switch
if(條件){
}else if(條件){
}else{
}
if語句
switch(name){case '1':
age= 123;break;case '2':
age= 456;break;default:
age= 777;
}
switch語句
2、循環(huán)語句
JavaScript中支持三種循環(huán)語句,分別是:
var names = ["alex", "tony", "rain"];for(var i=0;i
console.log(i);
console.log(names[i]);
}
方式一
var names = ["alex", "tony", "rain"];for(var index innames){
console.log(index);
console.log(names[index]);
}
方式二
while(條件){//break;
//continue;
}
方式三
3、異常處理
try {
//這段代碼從上往下運行,其中任何一個語句拋出異常該代碼塊就結(jié)束運行
}
catch (e) {
// 如果try代碼塊中拋出了異常,catch代碼塊中的代碼就會被執(zhí)行。
//e是一個局部變量,用來指向Error對象或者其他拋出的對象
}
finally {
//無論try中代碼是否有異常拋出(甚至是try代碼塊中有return語句),finally代碼塊中始終會被執(zhí)行。
}
注:主動跑出異常 throw Error('xxxx')
六、函數(shù)
1、基本函數(shù)
JavaScript中函數(shù)基本上可以分為一下三類:
// 普通函數(shù)
function func(arg){
return true;
}
// 匿名函數(shù)
var func = function(arg){
return "tony";
}
// 自執(zhí)行函數(shù)
(function(arg){
console.log(arg);
})('123')
注意:對于JavaScript中函數(shù)參數(shù),實際參數(shù)的個數(shù)可能小于形式參數(shù)的個數(shù),函數(shù)內(nèi)的特殊值arguments中封裝了所有實際參數(shù)。
2、作用域
JavaScript中每個函數(shù)都有自己的作用域,當出現(xiàn)函數(shù)嵌套時,就出現(xiàn)了作用域鏈。當內(nèi)層函數(shù)使用變量時,會根據(jù)作用域鏈從內(nèi)到外一層層的循環(huán),如果不存在,則異常。
切記:所有的作用域在創(chuàng)建函數(shù)且未執(zhí)行時候就已經(jīng)存在。
function f2(){
var arg= 111;
function f3(){
console.log(arg);
}
return f3;
}
ret = f2();
ret();
functionf2(){var arg= [11,22];functionf3(){
console.log(arg);
}
arg= [44,55];returnf3;
}
ret=f2();
ret();
View Code
注:聲明提前,在JavaScript引擎“預(yù)編譯”時進行。
更多:http://www.cnblogs.com/wupeiqi/p/5649402.html
3、閉包
閉包是指可以包含自由(未綁定到特定對象)變量的代碼塊。
「閉包」,是指擁有多個變量和綁定了這些變量的環(huán)境的表達式(通常是一個函數(shù)),因而這些變量也是該表達式的一部分。
閉包是個函數(shù),而它「記住了周圍發(fā)生了什么」。表現(xiàn)為由「一個函數(shù)」體中定義了「另個函數(shù)」
由于作用域鏈只能從內(nèi)向外找,默認外部無法獲取函數(shù)內(nèi)部變量。閉包,在外部獲取函數(shù)內(nèi)部的變量。
function f2(){
var arg= [11,22];
function f3(){
return arg;
}
return f3;
}
ret = f2();
ret();
4、面向?qū)ο?/p>
function Foo (name,age) {
this.Name = name;
this.Age = age;
this.Func = function(arg){
return this.Name + arg;
}
}
var obj = new Foo('alex', 18);
var ret = obj.Func("sb");
console.log(ret);
對于上述代碼需要注意:
Foo充當?shù)臉?gòu)造函數(shù)
this代指對象
創(chuàng)建對象時需要使用 new
上述代碼中每個對象中均保存了一個相同的Func函數(shù),從而浪費內(nèi)存。使用原型和可以解決該問題:
function Foo (name,age) {
this.Name = name;
this.Age = age;
}
Foo.prototype = {
GetInfo: function(){
return this.Name + this.Age
},
Func : function(arg){
return this.Name + arg;
}
}
總結(jié)
以上是生活随笔為你收集整理的pythonjavascript一起开发_Python开发【第十一篇】:JavaScript的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python调用shell脚本的参数_使
- 下一篇: win8计算机管理员权限删除文件,win