日期時間.引用類型.數(shù)組排序

日期時間對象

1.js內(nèi)置對象Date用來管理日期和時間的2.它提供了很多方法 用來獲取和計算時間3.首先要創(chuàng)建時間對象,Date構(gòu)造函數(shù),可以有參數(shù)4.如果不傳參數(shù),則表示系統(tǒng)當(dāng)前時間對象

? ? var d = Date();

? ? console.log(d);

? ? console.log(d.toString());

? ? console.log(d.toLocaleString());

? ? // 以上都是打印一個系統(tǒng)本地時間

? ? // 指定時間

? ? var d = new Date(2021,5,17,20,20,20);

? ? console.log(d);

? ? // 分別查看某個一部分的值,年份,月份,日期,星期,時,分,秒

? ? console.log(d.getFullYear()); // 輸出年份

? ? console.log(d.getMonth());? // 輸出月份,自定義當(dāng)前月份的時候需要減一

? ? console.log(d.getDate()); // 輸出日期(幾號)

? ? console.log(d.getDay()); // 輸出星期幾 四 (定義星期的時候星期天為0)

? ? console.log(d.getHours()) // 輸出小時

? ? console.log(d.getMinutes()); // 輸出分鐘

? ? console.log(d.getSeconds()); // 輸出秒

時間戳

```

? ? var d = new Date();

? ? console.log(d.getTime());//返回一個時間戳(unix)16239048...返回的是毫秒

```

案例計算時間差:計算北京奧運會距離現(xiàn)在過去了多少天 // 2008-8-8至2021-6-17

? ? var a1 = new Date(2008,7,8),

? ? ? ? a2 = new Date();//沒有參數(shù)表示返回當(dāng)前系統(tǒng)的時間

? ? var unix1 = a1.getTime(),

? ? ? ? unix2 = a2.getTime();

? ? var days = (unix2 - unix1) / 1000 / 60 / 60 /24;

? ? console.log(Math.ceil(days)); //輸出最后的結(jié)果 Math.ceil表示向上取整

還有一些取整值的方法

? ? Math.ceil(num) 向上取整,取最近較大的值 3.14 取 4

? ? Math.floor(num) 向下取整,直接舍棄掉小數(shù)部分 3.14 取 3

? ? Math.round(num) 四舍五入取值 3.5 取 4

? ? Math.max(數(shù)組)、Math.min(數(shù)組) 表示取一組數(shù)中最大值和最小值,這里是挨個傳參,在實際使用中,往往是求數(shù)組中的最大值和最小值,借用展開語法,使用...

? ? Math.max(...arr) 這里的arr表示是一個變量名,并不是挨個出傳入一組數(shù)組,所以需要借用展開語法...

? ? Math.random() 取隨機數(shù)或者隨機字符串,隨機生成一個0-1之間的數(shù)字

? ? Math.floor(Math.random()*10)+1 也可以隨機生成1-10之間的隨機數(shù) Math。floor表示向下取整,后面+1表示包括了10

? ? Math.ceil(Math.random()*10) 也是隨機生成1-10之間的隨機數(shù),而Math.ceil表示向上取整,不用+1,10也能取到隨機數(shù)里面

隨機生成一個數(shù)組

```

? ? var arr = ['a','b','c','d'];

? ? var i = Math.floor(Math.random()*arr.length);

? ? console.log(arr[i]);

? ? 可以將字符串替換成名字,生成一個隨機的點名功能

? ? 拓展:定時器 seInterval("代碼","時間間隔");括號里面有兩個值,一個是要執(zhí)行這個定時器的代碼,一個是時間間隔的毫秒

```

隨機點名

? ? setInterval(function () {

? ? ? ? // 隨機點名

? ? ? ? var names = ['忘了屏', '五集采', '武漢', '路演', '可似景', '徐冰'];

? ? ? ? var i = Math.floor(Math.random() * names.length); // 0, arr.length - 1

? ? ? ? // console.log(names[i]);

? ? ? ? cont.innerHTML = names[i];

? ? }, 1000);

引用類型

js中的數(shù)據(jù)類型:

? ? number,boolean,string? 屬于單一類型,基本類型

? ? object(對象,數(shù)組,null) 屬于復(fù)合類型,引用類型

? ? 不同類型的數(shù)據(jù),在操作時,(賦值,比較,傳參)有不同的行為;

賦值操作:

? ? 基本類型數(shù)據(jù)都是單一值,在內(nèi)存中所占的空間比較小,因此,賦值時會單獨的創(chuàng)建副本,也就是兩個值,相互不影響

? ? 引用類型是復(fù)合數(shù)據(jù),往往比較大,會占用一定的內(nèi)存空間,因此 賦值時,它只是復(fù)制地址,相同的地址對應(yīng)同一個內(nèi)存中的值(就是同一個,沒有發(fā)生復(fù)制創(chuàng)建副本),接下來,無論誰修改內(nèi)存中的值,都會影響另一個對象

? ? //基本類型數(shù)據(jù)的賦值操作

? ? ? ? ```

? ? ? ? ? ? var a = 1;

? ? ? ? ? ? var b = a; //把a的值拷貝一份 賦值給b,內(nèi)存中有2個值,互不影響的

? ? ? ? ? ? a = 2;

? ? ? ? ? ? console.log(b); //打印結(jié)果為1

? ? ? ? ```

? ? //引用類型的賦值操作

? ? ? ? ```

? ? ? ? ? ? var lucy = {

? ? ? ? ? ? ?? name:"lucy",

? ? ? ? ? ? ?? sex:"female",

? ? ? ? ? ? ?? age:18

? ? ? ? ? ? }

? ? ? ? //通過賦值創(chuàng)建一個相同的對象

? ? ? ? ? ? var lily = lucy;//拷貝了lucy對象的地址,也叫引用地址,始終是對應(yīng)的是同一個對象

? ? ? ? //修改lily的名字

? ? ? ? lily.name = "lily";

? ? ? ? console.log(lily);

? ? ? ? console.log(lucy);//兩個輸出的name都是lily

? ? ? ? ```

? ? //比較運算:==

? ? 引用類型檢測是否相等,一個簡單和粗暴的標(biāo)準(zhǔn)是否是同一個(相互引用)

? ? 基本類型數(shù)據(jù),只要值相同"=="就為true

? ? 引用類型數(shù)據(jù),內(nèi)存中的兩個對象,永遠不相等,通過賦值來引用同一個對象,才能相等,因為是引用的同一個對象

? ? //傳參操作:

? ? 基本類型數(shù)據(jù),如何傳參和賦值是一樣的,將實參的值(全局變量)拷貝一份給形參(局部變量),它兩不是同一個,局部 = 全局 因為是全局參數(shù)賦值給局部參數(shù),作為基本類型的數(shù)據(jù),相互不影響

? ? 引用類型的傳參:

? ? ? ? 只要函數(shù)體內(nèi)修改對象,就會影響外部全局的對象

數(shù)組的排序

將數(shù)組中的元素,按照升序或者降序排列

1.冒泡排序:始終將最大的值冒泡排序到最后面

? ? ```

? ? ? ? var arr = [8,7,6,5,4,3,2,1];

? ? ? ? //先找到最大的數(shù),放到最后,進行兩兩比較,最大的數(shù)永遠在最后面,利用兩個for循環(huán),外層的for用于循環(huán)多次判斷數(shù)組的兩兩大小,里面的for循環(huán)用于判斷前后兩個數(shù),也就是兩兩對比,大的值就對調(diào)位置,再用if用于判斷,里面申明一個新的變量接收對調(diào)的值的臨時存放,最終完成對調(diào)

? ? ? ? for(var j = 0; j < arr.length -1; j++){

? ? ? ? ?? for(var i = 0; i < arr.length - 1 - j; i++){

? ? ? ? ? ? ?? if(arr[i] > arr[i+1]){

? ? ? ? ? ? ? ? ?? var tmp;

? ? ? ? ? ? ? ? ?? tmp = arr[i];

? ? ? ? ? ? ? ? ?? arr[i] = arr[i+1];

? ? ? ? ? ? ? ? ?? arr[i+1] = tmp;

? ? ? ? ? ? ?? }

? ? ? ? ?? }

? ? ? ? }

? ? ? ? console.log(arr);

? ? ```

2.選擇排序:將最小的數(shù)永遠排序放在最后

? ? ```

? ? ? ? var arr = [8,7,6,5,4,3,2,1];

?? // 要比較的數(shù)

?? for (var i = 0; i < arr.length - 1; i++) {

? ? ?? // i = 8? 依次和后面的 7,6,5,4,3,2,1比較

? ? ?? for (var j = i + 1; j < arr.length; j++) {

? ? ? ? ?? // 如果這一輪中的某個值 比當(dāng)前要比較的值小 則交換位置

? ? ? ? ?? if (arr[j] < arr[i]) {

? ? ? ? ? ? ?? var tmp;

? ? ? ? ? ? ?? tmp = arr[i];

? ? ? ? ? ? ?? arr[i] = arr[j];

? ? ? ? ? ? ?? arr[j] = tmp;

? ? ? ? ?? }

? ? ?? }

?? }

?? console.log(arr);

? ? ```

關(guān)于引用類型,以及基本類型總結(jié):

? ??//?數(shù)據(jù)類型?根據(jù)他們在操作時的不同行為?可以劃分成:

????????//?1、基本類型的數(shù)據(jù),也叫基本數(shù)據(jù)類型?單一值的數(shù)據(jù)類型?boolean?string?number?

????????//?2、引用類型的數(shù)據(jù),也叫復(fù)合類型數(shù)據(jù)?不但有值還有結(jié)構(gòu)?object(Object,Array,null)

????????//?執(zhí)行賦值(=)、比較(==)和傳參時?表現(xiàn)不同的行為??

????????//?基本類型的數(shù)據(jù)?內(nèi)容都比較固定?例如?一個數(shù)值?最多只需要8個字節(jié)就足夠存儲?因此他們在賦值時會復(fù)制"值"的副本

????????//?而引用類型?例如對象?不僅有值還有方法?內(nèi)容可能較大?如果賦值時再單獨創(chuàng)建值的副本?就會顯著占用內(nèi)存,因此它賦值的是對象的地址

????????//?意味著?這兩個變量引用了同一段地址對應(yīng)的對象

????????//?區(qū)別是?

????????//?基本類型賦值時?內(nèi)存中?有2個值?互不影響

????????//引用類型賦值時?內(nèi)存中?只有1個值?誰修改都會影響另一個

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

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

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