前端之JavaScript 02

一、函數

// 最基礎的函數定義
function f1() {console.log('hello world!');
}
f1();
//  hello world!// 帶參數的函數
function f2(name,age) {console.log("姓名 : " + name + "  年齡:" + age);
}
f2("jassin",18);
//  姓名 : jassin  年齡:18// 帶返回值的函數
function f3(arg1,arg2) {return arg1 + arg2;
}var s = f3("jassin", "dulala");
console.log(s);
//  jassindulala// 匿名函數
var sum = function(arg1,arg2){return arg1 + arg2;
};
ret = sum(1,2);
console.log(ret);
// 3//自執行函數(比較常用
(function (arg1,arg2) {console.log("自執行函數" + (arg1 +arg2));
})(10,20);
// 自執行函數30

函數的定義

function 函數名 (參數){?<br>    函數體;return 返回值;
}

功能說明:

可以使用變量、常量或表達式作為函數調用的參數
函數由關鍵字function定義
函數名的定義規則與標識符一致,大小寫是敏感的
返回值必須使用return
Function 類可以表示開發者定義的任何函數。

用 Function 類直接創建函數的語法如下:

var 函數名 = new Function("參數1","參數n","function_body");

雖然由于字符串的關系,第二種形式寫起來有些困難,但有助于理解函數只不過是一種引用類型,它們的行為與用 Function 類明確創建的函數行為是相同的。

?

?

函數的全局變量和局部變量

局部變量:

在JavaScript函數內部聲明的變量(使用var)是局部變量,所以只能在函數內部訪問它(該變量的作用域使是函數內部)。只要函數運行完畢,本地變量就會被刪除。

全局變量:

在函數外聲明的變量是全局變量,網頁上所有腳本和函數都能訪問它。

變量生存周期:

JavaScript變量的生命期從它們被聲明的時間開始。

局部變量會在函數運行以后被刪除

全局變量會在頁面關閉后刪

// 1、
//  不推薦使用
(function (arg1,arg2) {n = 100;  // 相當于定義了一個全局變量var m = 100;console.log(" i can forget to you " + (arg1 + arg2));
})(10,20);// 2、可以使用
var n;  // 提前聲明要使用的全局變量

(function (arg1,arg2) {n = 100;var m = 100;console.log(" i can forget to you " + (arg1 + arg2));
})("can","  youcan");

作用域

首先在函數內部查找變量,找不到則到外層函數查找

執行函數一定要去找函數定義的位置

例子:

//   執行函數一定要去找函數定義的位置
// 自己用找自己
var city = "beijing";
function f() {var city = "shanghai";function inner() {var city = "shenzhen";console.log(city);}inner();
}
f();
sehnzhen//  自己沒有找上一級
var city = "beijing";
function bar() {console.log(city);
}
function f() {var city = "shanghai";return bar;
}
var ret = f();
ret();beijing

閉包

// 閉包
// 內部函數可以訪問外部函數
var city = "beijing";
function f() {var city = "shanghai"function inner() {console.log(city);}return inner;
}
var ret = f();
ret();// shanghai

二、Date對象

1、創建Date對象

//方法1:不指定參數
var nowd1=new Date();
alert(nowd1.toLocaleString( ));
//方法2:參數為日期字符串
var nowd2=new Date("2004/3/20 11:12");
alert(nowd2.toLocaleString( ));
var nowd3=new Date("04/03/20 11:12");
alert(nowd3.toLocaleString( ));
//方法3:參數為毫秒數
var nowd3=new Date(5000);
alert(nowd3.toLocaleString( ));
alert(nowd3.toUTCString());//方法4:參數為年月日小時分鐘秒毫秒
var nowd4=new Date(2004,2,20,11,12,0,300);
alert(nowd4.toLocaleString( ));//毫秒并不直接顯示

?Date對象的方法—獲取日期和時間(更多)

獲取日期和時間
getDate()                 獲取日
getDay ()                 獲取星期
getMonth ()               獲取月(0-11)
getFullYear ()            獲取完整年份
getYear ()                獲取年
getHours ()               獲取小時
getMinutes ()             獲取分鐘
getSeconds ()             獲取秒
getMilliseconds ()        獲取毫秒
getTime ()                返回累計毫秒數(從1970/1/1午夜)

例子:

function getCurrentDate(){//1. 創建Date對象var date = new Date(); //沒有填入任何參數那么就是當前時間//2. 獲得當前年份var year = date.getFullYear();//3. 獲得當前月份 js中月份是從0到11.var month = date.getMonth()+1;//4. 獲得當前日var day = date.getDate();//5. 獲得當前小時var hour = date.getHours();//6. 獲得當前分鐘var min = date.getMinutes();//7. 獲得當前秒var sec = date.getSeconds();//8. 獲得當前星期var week = date.getDay(); //沒有getWeek// 2014年06月18日 15:40:30 星期三return year+"年"+changeNum(month)+"月"+day+"日 "+hour+":"+min+":"+sec+" "+parseWeek(week);}alert(getCurrentDate());//解決 自動補齊成兩位數字的方法function changeNum(num){if(num < 10){return "0"+num;}else{return num;}}
//將數字 0~6 轉換成 星期日到星期六function parseWeek(week){var arr = ["星期日","星期一","星期二","星期三","星期四","星期五","星期六"];//             0      1      2      3 .............return arr[week];
}
View Code

Date對象的方法—設置日期和時間

//設置日期和時間
//setDate(day_of_month)       設置日
//setMonth (month)                 設置月
//setFullYear (year)               設置年
//setHours (hour)         設置小時
//setMinutes (minute)     設置分鐘
//setSeconds (second)     設置秒
//setMillliseconds (ms)       設置毫秒(0-999)
//setTime (allms)     設置累計毫秒(從1970/1/1午夜)var x=new Date();
x.setFullYear (1997);    //設置年1997
x.setMonth(7);        //設置月7
x.setDate(1);        //設置日1
x.setHours(5);        //設置小時5
x.setMinutes(12);    //設置分鐘12
x.setSeconds(54);    //設置秒54
x.setMilliseconds(230);        //設置毫秒230
document.write(x.toLocaleString( )+"<br>");
//返回1997年8月1日5點12分54秒

x.setTime(870409430000); //設置累計毫秒數
document.write(x.toLocaleString( )+"<br>");
//返回1997年8月1日12點23分50秒
View Code

Date對象的方法—日期和時間的轉換

日期和時間的轉換:getTimezoneOffset():8個時區×15度×4分/度=480;
返回本地時間與GMT的時間差,以分鐘為單位
toUTCString()
返回國際標準時間字符串
toLocalString()
返回本地格式時間字符串
Date.parse(x)
返回累計毫秒數(從1970/1/1午夜到本地時間)
Date.UTC(x)
返回累計毫秒數(從1970/1/1午夜到國際時間)
View Code

練習

將當前日期按“2017-12-27 11:11 星期三”格式輸出。

// 2017-12-27 11:11 星期三
function d() {// 創建Date 對象var date = new Date();// 獲取當前年份var year = date.getFullYear();// 獲取當前月份var month = date.getMonth()+1;// 獲取日var day = date.getDate();// 獲取小時var hour = date.getHours();// 獲取分鐘var minute = date.getMinutes();// 獲取星期var week = date.getDay();var weekStr = [ "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];if (month < 10){month = "0" + month;}console.log(year+"-"+month+"-"+day+" "+hour+":"+minute+" "+weekStr[week])
}
d();
answer

?

三、序列化和反序列化(重要)

基礎

// JSON對象有兩個方法: JSON.parse()和JSON.stringify()方法,
// 前者是將一個字符串解析為JSON對象,后者是將一個JSON對象轉換為一個字符串。var o= {"name":"jassin","age":18
};
// 序列化
var s = JSON.stringify(o);
console.log(o,typeof o);  // Object "object"
console.log(s, typeof s);  // {"name":"jassin","age":18} string// 反序列化
var obj =JSON.parse(s);
console.log(obj, typeof obj); // {name: "jassin", age: 18} "object"//在使用JSON.stringify()時,
// 如果對象中的值是function或是undefined,則在序列化為字符串時會會忽略掉這個鍵值對。如:
var person = {"name":"jassin","age" : 18,"brother":undefined,"say": function () {alert("hello")}
};
console.log(JSON.stringify(person));//  {"name":"jassin","age":18}

?

// JSON.stringify()方法除要序列化的JavaScript 對象外,還可以接收另外兩個參數,
這兩個參數用于指定以不同的方式序列化JavaScript 對象。第一個參數是個過濾器,可以是一個數組,
也可以是一個函數;第二個參數是一個選項,表示是否在JSON 字符串中保留縮進。單獨或組合使用這兩個參數,
可以更全面深入地控制JSON 的序列化。//  1、如果過濾器參數是數組,那么JSON.stringify()的結果中將只包含數組中列出的屬性。如下:
var person = {"name":"lishi","age":21,"brother":[{"name":"lili","age":18},{"name":"yan","age":22}],"sex" :"女","birthday": new Date(1996,12,20)
};
var personStr = JSON.stringify(person,["name","brother","sex"]);
console.log(personStr);// {"name":"lishi","brother":[{"name":"lili"},{"name":"yan"}],"sex":"女"}// 2、如果第二個參數是函數,行為會稍有不同。傳入的函數接收兩個參數,屬性(鍵)名和屬性值。
// 根據屬性(鍵)名可以知道應該如何處理要序列化的對象中的屬性。屬性名只能是字符串,
// 而在值并非鍵值對兒結構的值時,鍵名可以是空字符串。為了改變序列化對象的結果,
// 函數返回的值就是相應鍵的值。不過要注意,如果函數返回了undefined,那么相應的屬性會被忽略。
// 如下:var person = {"name": "莉莉","age":21,"sister":["妹妹","我也不知道"]
}var personStr = JSON.stringify(person,function (key,value) {switch (key){case "sister":return value.join(",");case "age":return value + 1;default:return value;}
});
console.log(personStr);//  {"name":"莉莉","age":22,"sister":"妹妹,我也不知道"}// 3、JSON.stringify()方法的第三個參數用于控制結果中的縮進和空白符。
// 如果這個參數是一個數值,那它表示的是每個級別縮進的空格數。最大縮進空格數為10,
// 所有大于10 的值都會自動轉換為10。如果縮進參數是一個字符串而非數值,
// 則這個字符串將在JSON 字符串中被用作縮進字符(不再使用空格)。
// 縮進字符串最長不能超過10 個字符長。如果字符串長度超過了10 個,結果中將只出現前10 個字符。如
// :
var person = {"name" : "lili","age" : 20,"sister" : ["哆啦A夢","皮卡丘"]
};
// var personStr = JSON.stringify(person,null,4);
// console.log(personStr);
// {
//     "name": "lili",
//     "age": 20,
//     "sister": [
//         "哆啦A夢",
//         "皮卡丘"
//     ]
// }var personStr = JSON.stringify(person,null,"***");
console.log(personStr);
// {
// ***"name": "lili",
// ***"age": 20,
// ***"sister": [
// ******"哆啦A夢",
// ******"皮卡丘"
// ***]
// }
探索

四、RegExp對象(正則)

                1. Python里面:1. import re2. p1 = re.compile("^[a-zA-Z][a-zA-Z0-9_]{5,11}$")3. p1.match()4. p1.search()5. p1.findall()
View Code

?

//RegExp對象//創建正則對象方式1
// 參數1 正則表達式
// 參數2 驗證模式:g(global)和i(忽略大小寫)// 用戶名只能是英文字母、數字和_,并且首字母必須是英文字母。長度最短不能少于6位 最長不能超過12位。// 創建RegExp對象方式
var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$", "g");// 匹配響應的字符串
var s1 = "bc123";//RegExp對象的test方法,測試一個字符串是否符合對應的正則規則,返回值是true或false。
reg1.test(s1);  // true

?

//方式一
var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$", "g");
var s1 = "ba1223";
var s2 = "123alex";
console.log(reg1.test(s1));
console.log(reg1.test(s2));// true
// false// 簡寫模式
var r2 = /^[a-zA-Z][a-zA-Z0-9_]{5,11}$/g;
console.log(r2.test(s1));
console.log(r2.test(s2));// String對象與正則結合的4個方法
var s2 = "hello world";s1 = s2.match(/o/g);
console.log(s1);    //  ["o", "o"]

s3 = s2.search(/h/g);
console.log(s3);    // 0

s4 = s2.split(/o/g);
console.log(s4);    // ["hell", " w", "rld"]

s5 = s2.replace(/o/g,"s");
console.log(s5);    // hells wsrld// 關于匹配模式:g和i的簡單示例
var s1 = "name:lishi  age:18";
s1 = s1.replace(/a/,"哈哈哈");
console.log(s1);
// n哈哈哈me:lishi  age:18

s2 = s1.replace(/a/g,"哈哈哈");
console.log(s2);
//  n哈哈哈me:lishi  哈哈哈ge:18

s3 = s1.replace(/a/gi,"哈哈哈");
console.log(s3);
//  n哈哈哈me:lishi  哈哈哈ge:18

?

?

五、Math對象

//該對象中的屬性方法 和數學有關.
   abs(x)    返回數的絕對值。
exp(x)    返回 e 的指數。
floor(x)對數進行下舍入。
log(x)    返回數的自然對數(底為e)。
max(x,y)    返回 x 和 y 中的最高值。
min(x,y)    返回 x 和 y 中的最低值。
pow(x,y)    返回 x 的 y 次冪。
random()    返回 0 ~ 1 之間的隨機數。
round(x)    把數四舍五入為最接近的整數。
sin(x)    返回數的正弦。
sqrt(x)    返回數的平方根。
tan(x)    返回角的正切。//方法練習://alert(Math.random()); // 獲得隨機數 0~1 不包括1.//alert(Math.round(1.5)); // 四舍五入//練習:獲取1-100的隨機整數,包括1和100//var num=Math.random();//num=num*10;//num=Math.round(num);//alert(num)//============max  min=========================/* alert(Math.max(1,2));// 2alert(Math.min(1,2));// 1 *///-------------pow--------------------------------alert(Math.pow(2,4));// pow 計算參數1 的參數2 次方.

?

轉載于:https://www.cnblogs.com/jassin-du/p/8120561.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/453259.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453259.shtml
英文地址,請注明出處:http://en.pswp.cn/news/453259.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

什么是雙絞線

雙絞線&#xff08;twisted pair&#xff0c;TP&#xff09;是一種綜合布線工程中最常用的傳輸介質&#xff0c;是由兩根具有絕緣保護層的銅導線組成的。把兩根絕緣的銅導線按一定密度互相絞在一起&#xff0c;每一根導線在傳輸中輻射出來的電波會被另一根線上發出的電波抵消&a…

Android蒙版倒計時,【倒計時海報設計】- 虎課網

我們在大街上經常會看到各種宣傳海報&#xff0c;有時商家為了達到促銷的目的會在醒目的地方張貼一張倒計時海報&#xff0c;為的就是吸引群眾的眼睛&#xff0c;大家了解PS倒計時海報設計的制作過程嗎&#xff1f;如果對這方面操作不太了解的話&#xff0c;大家可以關注一下下…

linkit-smart-7688-feed 安裝筆錄

轉載于:https://www.cnblogs.com/orangezs/p/8571791.html

前端性能優化之性能測試

前端性能優化是一個很寬泛的概念&#xff0c;有很多教程都有前端性能優化的方法&#xff0c;這也是我們一直在關注的一件重要事情。配合各種方式、手段、輔助系統&#xff0c;前端優化的最終目的都是提升用戶體驗&#xff0c;改善頁面性能&#xff0c;我們常常竭盡全力進行前端…

模擬傳輸和數字傳輸的優缺點

與模擬數據通信相比較&#xff0c;數字數據通信具有下列優點&#xff1a; a. 來自聲音、視頻和其他數據源的各類數據均可統一為數字信號的形式&#xff0c;并通過數字通信系統傳輸 b. 以數據幀為單位傳輸數據&#xff0c;并通過檢錯編碼和重發數據幀來發現與糾正通信錯誤&am…

android瀏覽SD卡的文件,簡單實現瀏覽Android SD卡中的文件

----Main.javapublic class Main extends Activity {private TextView textView;private Button button;private ListView listView;public File currentParentFile;public File[] currentFiles;public static String sdcardDir ;static {try {//sd卡的路徑sdcardDir Environ…

Java線程狀態Jstack線程狀態BLOCKED/TIMED_WAITING/WAITING解釋

一、線程5種狀態 新建狀態&#xff08;New&#xff09; 新創建了一個線程對象。 就緒狀態&#xff08;Runnable&#xff09; 線程對象創建后&#xff0c;其他線程調用了該對象的start()方法。該狀態的線程位于可運行線程池中&#xff0c;變得可運行&#xff0c;等待獲取CPU的使…

彩票相關知識

很多人做夢都想中得彩票頭獎&#xff0c;很多人希望天上能掉下餡餅來砸中自己&#xff0c;很多人在作白日夢……彩票是一種風險投資&#xff0c;是一種四兩撥千斤的氣勢&#xff0c;更是一種眾人拾柴火焰高的真實寫照&#xff0c;沒買過彩票的人是很難體會那種美好的期望及期望…

(模擬信號/數字信號)分別以(模擬信號/數字信號)中傳輸方式

1、基本概念、基本術語和數據通信系統 1.基本概念和基本術語 數據&#xff1a;能夠由計算機處理的數字、字母和符號等具有一定意義的實體。 分類&#xff1a;模擬數據可以在一定的數據區域中取連續的值&#xff0c;如聲音和圖像&#xff1b;數字數據只能取離散的數值&#xff0…

C# 獲取文件名及擴展名

C#通過文件路徑獲取文件名 string fullPath "/WebSite1/Default.aspx";string filename System.IO.Path.GetFileName(fullPath);//文件名 “Default.aspx” string extension System.IO.Path.GetExtension(fullPath);//擴展名 “.aspx” string fileNameWithoutEx…

android11 rom,小米打造基于安卓11的ROM來了:米10嘗鮮

原標題&#xff1a;小米打造基于安卓11的ROM來了&#xff1a;米10嘗鮮據XDA報道&#xff0c;距離Android 11正式版發布還有幾天時間&#xff0c;9月8日正式面向Pixel 2、Pixel 3、Pixel 4和Pixel 3a等機型推送Android 11正式版。另一方面&#xff0c;各大手機品牌已經緊鑼密鼓開…

基于 HTML5 WebGL 的 3D 服務器與客戶端的通信

這個例子的初衷是模擬服務器與客戶端的通信&#xff0c;我把整個需求簡化變成了今天的這個例子。3D 機房方面的模擬一般都是需要鷹眼來輔助的&#xff0c;這樣找產品以及整個空間的概括會比較明確&#xff0c;在這個例子中我也加了&#xff0c;這篇文章就算是我對這次項目的一個…

什么是順序執行以及其特點

順序執行是程序的一種執行方式。是把一個具有獨立功能的程序獨占處理機直至最終結束的過程稱為程序的順序執行 順序執行的特點&#xff1a;順序性&#xff1a;程序順序執行時&#xff0c;其執行過程可看作一系列嚴格按程序規定的狀態轉移過程&#xff0c;也即是每執行一條指令&…

一年成為Emacs高手(像神一樣使用編輯器)

作者: 陳斌(redguardtoo) 更新時間: 2012-02-10 五 原創時間: 2012-01-31 周二 15:08 很容易.一年多前我還在Vi陣營,偶爾使用Emacs還總是忘記退出(C-x C-c)的快捷鍵,但是一年后我跨入高手行列. 現在網上很多中文文章都是和你強調Emacs有多牛,以激發你的興趣.最有名的大概是王垠…

七種常見的核酸序列蛋白編碼能力預測工具 | ncRNAs | lncRNA

注&#xff1a;這些工具的應用都是受限的&#xff0c;有些本來就是只能用于預測動物&#xff0c;在使用之前務必用ground truth數據來測試一些。我想預測某一個植物的轉錄本&#xff0c;所以可以拿已經注釋得比較好的擬南芥來測試一下。&#xff08;測試的結果還是比較驚人的&a…

android預覽界面編譯出錯,Android O預覽findViewById編譯錯誤

我試圖測試Android O Developer Preview的第二階段。 項目創建后&#xff0c;我只是點擊了構建并運行但我沒有任何成功。Android默認生成的代碼如下&#xff1a;Toolbar toolbar (Toolbar) findViewById(R.id.toolbar);發生編譯錯誤。Error:(18, 37) error: reference to find…

中斷與異常的區別

中斷&#xff1a; 中斷是CPU&#xff08;硬件&#xff09;所具備的功能 &#xff0c;它是指系統停止當前正在運行的程序而轉向其他服務&#xff0c;可能是因 為優先級高的請求服務了&#xff0c;或者是因為人為安排中斷。中斷是屬于正常現象。主要由CPU以外的事件引起的 中斷…

寒武紀找到了引領中國AI芯片走向世界的路

大約6億年前在地質學上被稱作“寒武紀”的時代&#xff0c;大量無脊椎動物在短時間內出現“生命大爆發”。如今&#xff0c;“寒武紀”這個名字再次被人們提及&#xff0c;它源自中科院計算所研發的人工智能芯片處理器的命名&#xff0c;意喻人工智能即將迎來大爆發的時代。“寒…

淺談PPM (Project Portfolio Management)

前言&#xff1a; 本文以純理論性的PPM講解為主&#xff0c;不會涉及到具體如何實施&#xff0c;我會在以后介紹詳細的PPM實施方案介紹。 PPM&#xff0c;可能很多人并不清楚甚至可能沒聽說過&#xff0c;這是一個近些年才流行起來的概念&#xff0c;是Project Portfolio Mana…

poj 3071 Football

http://poj.org/problem?id3071 2^n 支足球隊比賽&#xff0c;共比n場&#xff0c;第一場1號與2號比&#xff0c;3號與4號比…… 每場勝出者進入下一場&#xff0c;輸者淘汰 每一場都是相鄰的兩個隊伍比拼 已知任意兩個隊伍比拼獲勝的概率 求最后哪只隊伍獲勝的概率最大 dp[i]…