js基礎(chǔ)語(yǔ)法-02(2019/5/27)

JS基礎(chǔ)語(yǔ)法

一岁经、類型轉(zhuǎn)換
很多時(shí)候隐锭,我們?cè)谶M(jìn)行數(shù)據(jù)運(yùn)算或輸出等操作時(shí)需要將數(shù)據(jù)在不同類型之間進(jìn)行轉(zhuǎn)換携悯,

JS 數(shù)據(jù)類型轉(zhuǎn)方法主要有三種: 利用 js 變量弱類型自動(dòng)轉(zhuǎn)換获询、
轉(zhuǎn)換函數(shù)雳灾、強(qiáng)制類型轉(zhuǎn)換漠酿。

1.自動(dòng)類型轉(zhuǎn)換

2、函數(shù)轉(zhuǎn)換

parseInt()

1谎亩、parseInt()在轉(zhuǎn)換之前炒嘲,首先會(huì)分析該字符串,判斷位置為 0
處的字符匈庭,判斷它是否是個(gè)有效數(shù)字夫凸,如果不是,則直接返回
NaN阱持,不再繼續(xù)夭拌,如果是則繼續(xù),直到找到非字符

2紊选、parseInt()方法還有基模式啼止,可以把二進(jìn)制、八進(jìn)制兵罢、十六進(jìn)制或其他任何進(jìn)制的字符串轉(zhuǎn)換成整數(shù)献烦。基是由
parseInt()方法的第二個(gè)參數(shù)指定的

3卖词、如果十進(jìn)制數(shù)包含前導(dǎo) 0巩那,那么最好采用基數(shù)
10,這樣才不會(huì)意外地得到八進(jìn)制的值

parseFloat()

parseFloat()方法與
parseInt()方法的處理方式相似此蜈,但是parseFloat()可以識(shí)別第一個(gè)小數(shù)點(diǎn)

3即横、顯示轉(zhuǎn)換

toString()函數(shù)將內(nèi)容轉(zhuǎn)換為字符串形式,其中 Number 提供的

toString()函數(shù)可以將數(shù)字以指定的進(jìn)制轉(zhuǎn)換為字符串裆赵,默認(rèn)為十進(jìn)制东囚。

Number 還提供了
toFixed()函數(shù)將根據(jù)小數(shù)點(diǎn)后指定位數(shù)將數(shù)字轉(zhuǎn)為字符串,四舍五入

4战授、強(qiáng)制轉(zhuǎn)換

JS 為 Number页藻、Boolean桨嫁、String
對(duì)象提供了構(gòu)造方法,用于強(qiáng)制轉(zhuǎn)換其他類型的數(shù)據(jù)份帐。

此時(shí)操作的是整個(gè)數(shù)據(jù)璃吧,而不是部分。

<script type="text/javascript">
        // parseInt()   
        console.log(parseInt("123ab1c")); // 123
        console.log(parseInt("123.4.5ab1c")); // 123
        console.log(parseInt("0xA")); //returns 10
        console.log(parseInt("22.5")); //returns 22
        console.log(parseInt("blue111")); //returns NaN
        
        console.log(parseInt("AF", 16)); //returns 175
        console.log(parseInt("10", 2)); //returns 2
        console.log(parseInt("10", 8)); //returns 8
        console.log(parseInt("10", 10)); //returns 10
        
        console.log(parseInt("010")); //returns 8
        console.log(parseInt("010", 8)); //returns 8
        console.log(parseInt("010", 10)); //returns 10
        
        console.log("==========================");
        // parseFloat()
        console.log(parseFloat("123ab1c")); // 123
        console.log(parseFloat("123.4ab1c")); // 123
        console.log(parseFloat("0xA")); //returns 10
        console.log(parseFloat("22.5")); //returns 22
        console.log(parseFloat("blue111")); //returns NaN
        
        console.log("====================顯式轉(zhuǎn)換==========");
        var data = 10;
        console.log(data.toString())
        console.log(data.toString(2))
        data = 1.4;
        console.log(data.toFixed(0));
        data = 1.49;
        console.log(data.toFixed(1));
        data = true;
        console.log(data.toString());
        
        console.log("===================強(qiáng)制轉(zhuǎn)換==========");
        console.log(Number("1"));
        console.log(Number("1.4"));
        console.log(Number("123aabc"));
        console.log(Number("abc"));
        console.log(Number(true));
        console.log(Number(false));
        console.log(Number(19));
        console.log(Number(new Object()));
        console.log(Number(new Array()));
        
    </script>
    

二废境、數(shù)組

1.數(shù)組(array)是按次序排列的一組數(shù)據(jù)畜挨,每個(gè)值的位置都有編號(hào)(從 0
開(kāi)始),整個(gè)數(shù)組
用方括號(hào)表示噩凹。 Js 中定義數(shù)組的三種方式如下(也可先聲明再賦值) :


var arr=[值 1,值 2,值 3]; //隱式創(chuàng)建
var arr=new Array(值 1,值 2,值 3); //直接實(shí)例化
var array=new Array(size); //創(chuàng)建數(shù)組并指定長(zhǎng)度


2.數(shù)組的特點(diǎn):

1)巴元、數(shù)組的長(zhǎng)度是可變的

2)、數(shù)組的類型可以不一樣

3)栓始、不存在下標(biāo)越界

3务冕、數(shù)組的遍歷

數(shù)組的遍歷即依次訪問(wèn)數(shù)組的每一個(gè)元素 ,JS 提供三種遍歷數(shù)組的方式:

1)幻赚、普通 for 循環(huán)遍歷

for(var i = 0; i < 數(shù)組名.length; i++) {

}

注:可以拿到undefinded的值禀忆,無(wú)法獲取數(shù)組中屬性對(duì)應(yīng)的值

2)、for ... in

for(var i in 數(shù)組) {

// i是下標(biāo)或?qū)傩悦?/p>

}

注:無(wú)法拿到undefinded的值落恼,可以獲取數(shù)組中屬性對(duì)應(yīng)的值

3)箩退、foreach

數(shù)組.foreach(function(element,index){

// element:元素;index:下標(biāo)

});

注:無(wú)法獲取屬性對(duì)應(yīng)的值與undefinded的值

* for -- 不遍歷屬性

* foreach -- 不遍歷屬性和索引中的 undefined

* for in -- 不遍歷索引中的 undefined

  console.log("=======數(shù)組的遍歷=========");
        // 1佳谦、普通 for 循環(huán)遍歷
        for (var i = 0; i < arr1.length; i++) {
            console.log(i + "----------" + arr1[i]);
        }
        console.log("===============");
        // for... in
        for (var i in arr1) {
            console.log(i + '----------' + arr1[i]);
        }
        console.log("===============");
        // foreach
        arr1.forEach(function(elem,index){
            console.log(index+ '----' + elem);
        });

4戴涝、數(shù)組提供的方法

push 添加元素到最后

unshift 添加元素到最前

pop 刪除最后一項(xiàng)

shift 刪除第一項(xiàng)

reverse 數(shù)組翻轉(zhuǎn)

join 數(shù)組轉(zhuǎn)成字符串

indexOf 數(shù)組元素索引

slice 截取(切片)數(shù)組钻蔑,原數(shù)組不發(fā)生變化

splice 剪接數(shù)組啥刻,原數(shù)組變化,可以實(shí)現(xiàn)前后刪除效果

concat 數(shù)組合并

array.splice(index,howmany,item1,.....,itemX)


參數(shù) 描述


index 必需咪笑。規(guī)定從何處添加/刪除元素可帽。
該參數(shù)是開(kāi)始插入和(或)刪除的數(shù)組元素的下標(biāo),必須是數(shù)字窗怒。

howmany 必需映跟。規(guī)定應(yīng)該刪除多少元素。必須是數(shù)字扬虚,但可以是 "0"努隙。
如果未規(guī)定此參數(shù),則刪除從 index 開(kāi)始到原數(shù)組結(jié)尾的所有元素辜昵。

item1, ..., itemX 可選荸镊。要添加到數(shù)組的新元素

Type 描述

Array 如果從 arrayObject 中刪除了元素,則返回的是含有被刪除的元素的數(shù)組。

            
console.log("========數(shù)組提供的方法=======");
        console.log(arr2);
        arr2.push("dd"); // 數(shù)組的最后添加元素
        arr2[arr2.length] = "ee";
        console.log(arr2);
        arr2.unshift("hello");
        console.log(arr2);// 數(shù)組的最前面添加元素
        
        // 分割數(shù)組
        var str = arr2.join("-");
        console.log(str);
        // 將字符串轉(zhuǎn)換成數(shù)組
        var strarr = str.split("-");
        console.log(strarr);

三贷洲、 函數(shù)
函數(shù)收厨, 即方法。
就是一段預(yù)先設(shè)置的功能代碼塊优构,可以反復(fù)調(diào)用,根據(jù)輸入?yún)?shù)的不同雁竞,
返回不同的值钦椭。 函數(shù)也是對(duì)象。

1碑诉、函數(shù)的定義

定義方式有3種:

1)彪腔、函數(shù)聲明語(yǔ)句

function 函數(shù)名([形參]) {

}

調(diào)用:函數(shù)名([實(shí)參]);

2)、函數(shù)定義表達(dá)式

var 變量名/函數(shù)名 = function([形參]){

}

調(diào)用:變量名([實(shí)參])/函數(shù)名([實(shí)參]);

3)进栽、Function構(gòu)造函數(shù)

var 函數(shù)名 = new Function('參數(shù)1','參數(shù)2','函數(shù)的主體內(nèi)容');

調(diào)用:函數(shù)名([實(shí)參]);

注:構(gòu)造韓束的最后一個(gè)參數(shù)是函數(shù)體德挣。

注意:

1)、js 中的函數(shù)沒(méi)有重載快毛,同名的函數(shù)格嗅,會(huì)被后面的函數(shù)覆蓋。

2)唠帝、js 中允許有不定數(shù)目的參數(shù)屯掖,后面介紹 arguments 對(duì)象

函數(shù)名的提升(了解)

JavaScript 引擎將函數(shù)名視同變量名,所以采用 function
命令聲明函數(shù)時(shí)襟衰,整個(gè)函數(shù)會(huì)像變量聲明一樣贴铜,被提升到代碼頭部。所以瀑晒,下面的代碼不會(huì)報(bào)錯(cuò)

但是绍坝,如果采用賦值語(yǔ)句定義函數(shù),JavaScript 就會(huì)報(bào)錯(cuò)苔悦。

<script type="text/javascript">
        /* 函數(shù)的定義 */
        // 1轩褐、函數(shù)聲明語(yǔ)句
        function fn1(a,b) {
            console.log(a+b);
        }
        fn1(1,1);
        
        // 2、函數(shù)定義表達(dá)式
        var fn2 = function(x){
            console.log(x); 
        }
        console.log(fn2);
        fn2(10);
        
        // 3间坐、Function構(gòu)造函數(shù)
        var fn3 = new Function('x','y','console.log(x+y);')
        fn3(1,2);
        
        
        fn4();
        /*函數(shù)名的提升*/
        function fn4() {
            console.log("函數(shù)名的提升灾挨。。竹宋。劳澄。");
        }
        
        fn5();
        var fn5 = function(){
            console.log("函數(shù)名的提升...");
        }
    </script>

2. 函數(shù)的參數(shù)、調(diào)用和 return 語(yǔ)句
2.1參數(shù)
函數(shù)運(yùn)行的時(shí)候蜈七,有時(shí)需要提供外部數(shù)據(jù)秒拔,不同的外部數(shù)據(jù)會(huì)得到不同的結(jié)果,這種外部
數(shù)據(jù)就叫參數(shù)飒硅,定義時(shí)的參數(shù)稱為形參砂缩,調(diào)用時(shí)的參數(shù)稱為實(shí)參
?實(shí)參可以省略作谚,那么對(duì)應(yīng)形參為 undefined
?若函數(shù)形參同名(一般不會(huì)這么干):在使用時(shí)以最后一個(gè)值為準(zhǔn)。
?可以給參數(shù)默認(rèn)值: 當(dāng)參數(shù)為特殊值時(shí)庵芭,可以賦予默認(rèn)值妹懒。
?參數(shù)為值傳遞, 傳遞副本 双吆; 引用傳遞時(shí)傳遞地址,操作的是同一個(gè)對(duì)象好乐。

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

1匾竿、常用調(diào)用方式:函數(shù)名([實(shí)參]);

存在返回值可以變量接收,若接收無(wú)返回值函數(shù)則為 undefined

2蔚万、函數(shù)調(diào)用模式

3岭妖、方法調(diào)用模式

4、call()和apply()


javascript 中函數(shù)也是對(duì)象反璃,函數(shù)對(duì)象也可以包含方法昵慌。 call()apply()方法可以用來(lái)間
接地調(diào)用函數(shù)。任何函數(shù)可以作為任何對(duì)象的方法來(lái)調(diào)用版扩,哪怕這個(gè)函數(shù)不是那個(gè)對(duì)象的方
法废离。兩個(gè)方法都可以指定調(diào)用的實(shí)參。 call()方法使用它自有的實(shí)參列表作為函數(shù)的實(shí)參礁芦,
apply()方法則要求以數(shù)組的形式傳入?yún)?shù)


注:誰(shuí)調(diào)用函數(shù)蜻韭,this就指向誰(shuí)

匿名函數(shù)立即調(diào)用

(1)匿名函數(shù):function ([參數(shù)]){}

(2)調(diào)用:(function ([形參]) {})([實(shí)參]);

在函數(shù)只被使用一次的情況下可以使用這種方式,簡(jiǎn)便省事

2.3 return 語(yǔ)句

函數(shù)的執(zhí)行可能會(huì)有返回值柿扣,需要使用 return 語(yǔ)句將結(jié)果返回肖方。return
語(yǔ)句不是必需的,

如果沒(méi)有的話未状,該函數(shù)就不返回任何值俯画,或者說(shuō)返回 undefined。

作用:在沒(méi)有返回值的方法中司草,用來(lái)結(jié)束方法艰垂。

有返回值的方法中,一個(gè)是用來(lái)結(jié)束方法埋虹,一個(gè)是將值帶給調(diào)用者猜憎。

<script type="text/javascript">
        /* 參數(shù) */
        // 1、實(shí)參可以省略搔课,那么對(duì)應(yīng)形參為 undefined
        function fn1(a,b) {
            console.log(a);
        }
        fn1();
        fn1(1);
        fn1(1,2);
        
        // 2胰柑、若函數(shù)形參同名(一般不會(huì)這么干):在使用時(shí)以最后一個(gè)值為準(zhǔn)。
        function fn2(x,x){
            console.log(x);
        }
        fn2(10,20);
        
        // 3、可以給參數(shù)默認(rèn)值:當(dāng)參數(shù)為特殊值時(shí)柬讨,可以賦予默認(rèn)值崩瓤。
        function fn3(str) {
            str = str || "Hello";
            console.log(str);
        }
        fn3();
        fn3("你好");
        
        function fn4(str) {
            (str !== undefined && str !== null) ? str = str : str = "值不存在";
            console.log(str);
        }
        fn4();
        fn4("你好呀");
        
        // 4、參數(shù)為值傳遞踩官,傳遞副本 却桶;引用傳遞時(shí)傳遞地址,操作的是同一個(gè)對(duì)象
        // 值傳遞
        var num = 10;
        function fn5(n) {
            n = 20;
        }
        fn5(num);
        console.log(num);
        
        // 引用傳遞
        var arr = [1,2,3];
        var obj = {
            uname:"zhangsan"
        };
        function fn6(a,b) {
            a[0] = 100;
            b.uname = "lisi";
        }
        fn6(arr,obj);
        console.log(arr);
        console.log(obj);
        
        function fn7(a,b) {
            a = [4,5,6];
            b = {
                uname:"wangwu"
            };
        }
        fn7(arr);
        console.log(arr);
        console.log(obj);
        
        console.log("===============函數(shù)的調(diào)用==============");
        // 直接調(diào)用
        function fn8() {
            console.log(this);  // Window對(duì)象
        }
        fn8();
        
        // 函數(shù)調(diào)用模式
        var fn9 = function() {
            console.log(this); // Window對(duì)象
            return 1;
        }
        var f = fn9();
        console.log(f);
        
        // 方法調(diào)用模式
        var obj = {
            uname:"zhangsan",
            uage:18,
            cats:["喵喵","貓貓"],
            sayHello:function() {
                console.log(this); // obj對(duì)象
                console.log("你好呀~");
            }
        };
        console.log(obj.sayHello);
        obj.sayHello();
        
        // 間接調(diào)用
        var obj2 = {};
        function fn10(x,y) {
            console.log(x+y);
            console.log(this); 
        }
        fn10(1,2); //  Window對(duì)象
        
        fn10.call(); //  Window對(duì)象
        fn10.call(obj2); // obj2
        fn10.call(obj2,10,20); // obj2
        
        fn10.apply(obj2,[100,200]); // obj2
        
        console.log("===============匿名函數(shù)立即調(diào)用==============");
        
        (function(a,b) {
            console.log(a-b);
        })(10,2);
        
    </script>

2.3. arguments 對(duì)象和函數(shù)的方法及屬性

arguments 對(duì)象中存放了調(diào)用該函數(shù)時(shí)傳遞的實(shí)際參數(shù)蔗牡。由于 JavaScript
允許函數(shù)有不定數(shù)目的參數(shù)肾扰,所以我們需要一種機(jī)制,可以在函數(shù)體內(nèi)部讀取所有參數(shù)蛋逾,這就是
arguments
對(duì)象的由來(lái) 。函數(shù)中可以使用 arguments 對(duì)象來(lái)獲取實(shí)參窗悯。

  • 函數(shù)名.name 得到函數(shù)名稱

  • 函數(shù)名.length 得到函數(shù)的形參數(shù)量

  • 函數(shù)名.toString() 得到函數(shù)的源碼


<script type="text/javascript">
        
        function fn1 (a,b,c) {
            // arguments對(duì)象可以得到函數(shù)的實(shí)參數(shù)量
            console.log(arguments.length);
            console.log("函數(shù)....");
            console.log(arguments);
        }
        
        fn1(1,2);
        
        console.log(fn1.name);
        console.log(fn1.length);
        console.log(fn1.toString());
        
    </script>

2.4函數(shù)的作用域

函數(shù)作用域:全局(global variable)和局部(local variable)

1)全局變量與局部變量同名問(wèn)題

2)在函數(shù)中定義變量時(shí)区匣,若沒(méi)有加 var 關(guān)鍵字,使用之后自動(dòng)變?yōu)槿肿兞?/p>

3)變量作用域提升

<script type="text/javascript">
        var num = 1;
        
        function fn() {
            var num = 10; // 這是個(gè)局部變量蒋院,與全部變量毫無(wú)關(guān)系
            console.log(num); // 就近原則
            var b = 2; // 局部變量
            c = 3; // 不用var修飾符聲明的變量時(shí)全局變量
        }
        
        fn();
        
        console.log(num);
        //console.log(b);
        console.log(c);
        
        
        function foo(x) {
             if (x > 100) {
                var tmp = x - 100;
             }
             console.log(tmp);
        }
        
        function foo(x) {
            var tmp;
             if (x > 100) {
                tmp = x - 100;
             }
             console.log(tmp);
        }
        foo(1);
    </script>


2.5 閉包

出于種種原因亏钩,我們有時(shí)候需要得到函數(shù)內(nèi)的局部變量。但是欺旧,正常情況下姑丑,這是辦不到
的,只有通過(guò)變通方法才能實(shí)現(xiàn)辞友。那就是在函數(shù)的內(nèi)部栅哀,再定義一個(gè)函數(shù)。
閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)称龙。由于在 Javascript
語(yǔ)言中留拾,只有函數(shù)內(nèi)部的\子函數(shù)才能讀取局部變量,因此可以把閉包簡(jiǎn)單理解成"定義在一個(gè)函數(shù)內(nèi)部的函數(shù)"鲫尊。所以痴柔,
在本質(zhì)上,閉包就是將函數(shù)內(nèi)部和函數(shù)外部連接起來(lái)的一座橋梁疫向。
閉包可以用在許多地方咳蔚。它的最大用處有兩個(gè),一個(gè)是前面提到的可以讀取函數(shù)內(nèi)部的變
量搔驼,另一個(gè)就是讓這些變量的值始終保持在內(nèi)存中谈火。
以及還可以避免變量名沖突的問(wèn)題。

閉包的形成:

1匙奴、外部函數(shù)內(nèi)部嵌套內(nèi)部函數(shù)

2堆巧、內(nèi)部函數(shù)中使用外部函數(shù)的環(huán)境

3、外部函數(shù)返回內(nèi)部函數(shù)

閉包的作用:

1、獲取函數(shù)內(nèi)部的變量

2谍肤、保存變量的值在內(nèi)存中

3啦租、避免變量名重復(fù)

<script type="text/javascript">
        
        // 1、外部函數(shù)內(nèi)部嵌套內(nèi)部函數(shù) 
        function fn1() {
            var a = "Hello!";
            function fn2() {
                // 2荒揣、內(nèi)部函數(shù)中使用外部函數(shù)的環(huán)境
                console.log(a);
            }
            // 3篷角、外部函數(shù)返回內(nèi)部函數(shù)
            return fn2;
        }
        
        var f = fn1();
        console.log(f);
        f();
        
        
        function test() {
            var num = 1;
            num++;
            console.log(num);
        }
        
        test();
        test();
        test();
        
        console.log("====================");
        
        
        // 1、外部函數(shù)內(nèi)部嵌套內(nèi)部函數(shù) 
        function outFn() {
            var num = 1;
            function inFn(){
                // 2系任、內(nèi)部函數(shù)中使用外部函數(shù)的環(huán)境
                num++;
                console.log(num);
            }
            // 3恳蹲、外部函數(shù)返回內(nèi)部函數(shù)
            return inFn;
        }
        var inF = outFn();
        inF();
        inF();
        inF();
        inF();
        
        var inF1 = outFn();
        inF();
        
        console.log("===========澆水實(shí)例=========");
        document.write("==========澆水實(shí)例=========<br>");
        
        // 定義外部函數(shù),設(shè)置形參(水壺的容量)
        function waterFlower(total) {
            // 定義內(nèi)部函數(shù)俩滥,執(zhí)行澆水過(guò)程 (每次澆水嘉蕾,水容量減50ml)
            function water(flower) {
                // 當(dāng)水容量大于50ml則澆水
                if (total >= 50) {
                    // 每次澆水減50
                    total = total - 50;
                    
                } else {
                    // 如果沒(méi)水,則自動(dòng)加水
                    document.write("<h4>正在重新裝水....</h4>");
                    total = 200;
                    // 澆水
                    total = total - 50;
                    // 
                }
                document.write("給"+flower+"澆水50ml霜旧,剩余" + total + "ml的水错忱!<br>");
            }
            
            // 返回內(nèi)部函數(shù)
            return water;
        }
        
        // 裝水
        var t = waterFlower(200);
        // 澆水
        t("桃花"); 
        t("蘭花");
        t("玫瑰花");
        t("菊花");
        t("桂花");
        
        
        
        
    </script>


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


Arguments 只在函數(shù)內(nèi)部定義,保存了函數(shù)的實(shí)參
Array 數(shù)組對(duì)象
Data 日期對(duì)象挂据,用來(lái)創(chuàng)建和獲取日期
Math 數(shù)學(xué)對(duì)象
String 字符串對(duì)象以清,提供對(duì)字符串的一系列操作


String:


? charAt(idx):返回指定位置處的字符
? indexOf(Chr):返回指定子字符串的位置,從左到右崎逃。找不到返回-1
? substr(m,n):返回給定字符串中從 m 位置開(kāi)始掷倔,取 n 個(gè)字符,如果參數(shù) n 省略个绍,
則意味著取到字符串末尾勒葱。
? substring(m,n):返回給定字符串中從 m 位置開(kāi)始,到 n 位置結(jié)束障贸,如果參數(shù) n 省
略错森,則意味著取到字符串末尾。
? toLowerCase():將字符串中的字符全部轉(zhuǎn)化成小寫(xiě)篮洁。
? toUpperCase():將字符串中的字符全部轉(zhuǎn)化成大寫(xiě)涩维。
? length: 屬性,不是方法袁波,返回字符串的長(zhǎng)度瓦阐。


Math:


? Math.random()
? Math.ceil() :天花板 大于最大整數(shù)
? Math.floor() :地板 小于最小整數(shù) String


Date:


//獲取
? getFullYear()年, getMonth()月, getDate()日,
? getHours()時(shí),getMinutes()分,getSeconds()秒
//設(shè)置
? setYear(), setMonth(), ...
? toLoacaleString()


說(shuō)明

1.getMonth():得到的值: 0~11(1 月~12 月)

2.setMonth():設(shè)置值時(shí) 0~11

3.toLocaleString():可根據(jù)本地時(shí)間把 Date 對(duì)象轉(zhuǎn)換為字符串,并返回結(jié)果篷牌。

<script type="text/javascript">
        // 得到系統(tǒng)當(dāng)前時(shí)間
        var mydate = new Date();
        console.log(mydate);
        
        // toLocaleString():可根據(jù)本地時(shí)間把 Date 對(duì)象轉(zhuǎn)換為字符串睡蟋,并返回結(jié)果。
        console.log(mydate.toDateString());
        console.log(mydate.toLocaleString());
        
        var mon = mydate.getMonth()+1;
        if (mon < 10) {
            mon = "0" + mon;
        }
        
        var newDate = mydate.getFullYear() + "-" + mon + "-" + mydate.getDate();
        newDate += " " + mydate.getHours() + ":" + mydate.getMinutes() + ":" + mydate.getSeconds();
        console.log(newDate);
        
</script>


2.7 JS 對(duì)象

對(duì)象(object)是 JavaScript 的核心概念枷颊,也是最重要的數(shù)據(jù)類型戳杀。
JavaScript 的所有數(shù)
據(jù)都可以被視為對(duì)象该面。 JavaScript 提供多個(gè)內(nèi)建對(duì)象,比如 String信卡、 Date隔缀、
Array 等等。對(duì)象是帶有屬性和方法的特殊數(shù)據(jù)類型傍菇。
簡(jiǎn)單說(shuō)猾瘸,所謂對(duì)象,就是一種無(wú)序的數(shù)據(jù)集合丢习,由若干個(gè)"鍵值對(duì)"(key-value)構(gòu)成牵触。通
過(guò) JavaScript 我們可以創(chuàng)建自己的對(duì)象。 JavaScript
對(duì)象滿足的這種"鍵值對(duì)"的格式我們成為JSON 格式咐低,
以后會(huì)見(jiàn)得非常多揽思,即偉大的 JSON 對(duì)象。

1见擦、定義對(duì)象

JS 創(chuàng)建自定義對(duì)象绰更,主要通過(guò)三種方式:

1)、字面量形式創(chuàng)建對(duì)象

var 變量名 = {}; // 空對(duì)象

var 變量名 = {鍵:值,....};

2)锡宋、通過(guò) new Object 對(duì)象創(chuàng)建

var 變量名 = new Object();

3)、通過(guò) Object 對(duì)象的 create 方法創(chuàng)建對(duì)象

var 變量名 = Object.create(null或?qū)ο?;

// 1特恬、字面量形式創(chuàng)建對(duì)象
        var obj = {}; // 空對(duì)象
        var obj2 = {
            uname:"zhangsan",
            uage:18
        };
        obj2.usex=true;
        
        console.log(obj);
        console.log(obj2);
        
        // 2执俩、通過(guò) new Object 對(duì)象創(chuàng)建 
        var obj3 = new Object();
        obj3.name = "Tom";
        console.log(obj3);
        
        // 3、通過(guò) Object 對(duì)象的 create 方法創(chuàng)建對(duì)象
        var obj4 = Object.create(null);
        console.log(obj4.uname);
        
        var obj5 = Object.create(obj2);
        console.log(obj5.uname);


// 2癌刽、通過(guò) new Object 對(duì)象創(chuàng)建

console.log('============序列化和反序列化============');
        var str = '{"uname":"zhangsan", "uage":18 }';
        // 反序列化:將字符串轉(zhuǎn)換成對(duì)象
        var object1 = JSON.parse(str);
        console.log(object1);
        console.log(object1.uname);
        
        // 序列化役首,將對(duì)象轉(zhuǎn)換成字符串
        var json1 = JSON.stringify(object1)
        console.log(json1);
        console.log(json1.uname);

2、對(duì)象的序列化和反序列化

序列化即將 JS 對(duì)象序列化為字符串显拜,反序列化即將字符串反序列化為 JS 對(duì)象衡奥。

JS 中通過(guò)調(diào)用 JSON
方法,可以將對(duì)象序列化成字符串远荠,也可以將字符串反序列化成對(duì)象 矮固。

- 序列化對(duì)象,將對(duì)象轉(zhuǎn)為字符串

JSON.stringify(object)

- 反序列化譬淳,將一個(gè) Json 字符串轉(zhuǎn)換為對(duì)象档址。

JSON.parse(jsonStr)

console.log('============序列化和反序列化============');
        var str = '{"uname":"zhangsan", "uage":18 }';
        // 反序列化:將字符串轉(zhuǎn)換成對(duì)象
        var object1 = JSON.parse(str);
        console.log(object1);
        console.log(object1.uname);
        
        // 序列化,將對(duì)象轉(zhuǎn)換成字符串
        var json1 = JSON.stringify(object1)
        console.log(json1);
        console.log(json1.uname);
        

3邻梆、eval()

1守伸、可借助 eval()動(dòng)態(tài)函數(shù),將參數(shù)字符串解析成 js
代碼來(lái)執(zhí)行浦妄,只接受原始字符串作為參數(shù)

eval("console.log('你好')");//控制臺(tái)輸出你好

2尼摹、可將 json 串轉(zhuǎn)為 json 對(duì)象

1)第一種解析方式:得到的 json 對(duì)象名就是 jsonObj

eval("var jsonObj = " + jsonStr);

2)第二種解析方式:對(duì)象中有多個(gè)屬性

var jsonObj = eval("(" + jsonStr + ")");

由于 json 是以{ }的方式來(lái)開(kāi)始以及結(jié)束的见芹,在 eval
中會(huì)被當(dāng)成一個(gè)語(yǔ)句塊來(lái)處理,故必
須強(qiáng)制將它轉(zhuǎn)換成一種表達(dá)式蠢涝。加上圓括號(hào)是使 eval
函數(shù)在處理時(shí)強(qiáng)制將括號(hào)內(nèi)的表達(dá)式轉(zhuǎn)化為對(duì)象而不作為語(yǔ)句來(lái)執(zhí)行玄呛。

3)第二種解析方式:對(duì)象中只有一個(gè)屬性

eval(jsonStr);

 console.log("=============eval()============");
        console.log('你好');
        eval("console.log('你好')");//控制臺(tái)輸出你好
        
        // 1)第一種解析方式:得到的 json 對(duì)象名就是 jsonObj
        var ab = '{"uname":"zhangsan", "uage":18 }';
        eval("var jsonObj = " + ab);
        console.log(jsonObj);
        
        // 2)第二種解析方式:對(duì)象中有多個(gè)屬性
        var jsonObj2 = eval("(" +ab + ")");
        console.log(jsonObj2);
        
        
        var arrStr = "[1,'1a','fg']";
        // 第一種解析方式eval("var arrObj = " + arrStr);
        eval("var arr=" + arrStr);
        console.log(arr);
        // 第二種解析方式:eval(arrStr);
        
        console.log(arrStr);
        console.log(eval(arrStr));

2.8 this

**
**this 是 JavaScript 語(yǔ)言的一個(gè)關(guān)鍵字。

它代表函數(shù)運(yùn)行時(shí)惠赫,自動(dòng)生成的一個(gè)內(nèi)部對(duì)象把鉴,只能在函數(shù)內(nèi)部使用。
隨著函數(shù)使用場(chǎng)合的不同儿咱, this 的值會(huì)發(fā)生變化庭砍。但是有一個(gè)總的原則,那就是
this 指的
是混埠,調(diào)用函數(shù)的那個(gè)對(duì)象怠缸。

在函數(shù)中使用 this

**
**在函數(shù)中使用 this 屬于全局性調(diào)用,代表全局對(duì)象钳宪,通過(guò) window
對(duì)象來(lái)訪問(wèn)揭北。


function test () {
this.x = 1;
console.log(this.x);
}
test();
console.log(x);//相當(dāng)于定義在全局對(duì)象上的屬性



var x = 10;
console.log(x) // 10
function test (){
console.log(this.x) //10
this.x = 1;
console.log(this.x) //1
console.log(this)
}
test()
console.log(x) //1
console.log(this)


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市吏颖,隨后出現(xiàn)的幾起案子搔体,更是在濱河造成了極大的恐慌,老刑警劉巖半醉,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疚俱,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡缩多,警方通過(guò)查閱死者的電腦和手機(jī)呆奕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)衬吆,“玉大人梁钾,你說(shuō)我怎么就攤上這事⊙仿眨” “怎么了姆泻?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)冒嫡。 經(jīng)常有香客問(wèn)我麦射,道長(zhǎng),這世上最難降的妖魔是什么灯谣? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任潜秋,我火速辦了婚禮,結(jié)果婚禮上胎许,老公的妹妹穿的比我還像新娘峻呛。我一直安慰自己罗售,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布钩述。 她就那樣靜靜地躺著寨躁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪牙勘。 梳的紋絲不亂的頭發(fā)上职恳,一...
    開(kāi)封第一講書(shū)人閱讀 49,036評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音方面,去河邊找鬼放钦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛恭金,可吹牛的內(nèi)容都是我干的操禀。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼横腿,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼颓屑!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起耿焊,我...
    開(kāi)封第一講書(shū)人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤揪惦,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后罗侯,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體丹擎,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年歇父,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片再愈。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡榜苫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出翎冲,到底是詐尸還是另有隱情垂睬,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布抗悍,位于F島的核電站驹饺,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏缴渊。R本人自食惡果不足惜赏壹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望衔沼。 院中可真熱鬧蝌借,春花似錦昔瞧、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至稍坯,卻和暖如春酬荞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瞧哟。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工混巧, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人绢涡。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓牲剃,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親雄可。 傳聞我的和親對(duì)象是個(gè)殘疾皇子凿傅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容