JavaScript全面學習(中階)

1.typeof操作符總是返回一個字符串:

typeof 123; // 'number'
typeof NaN; // 'number'
typeof 'str'; // 'string'
typeof true; // 'boolean'
typeof undefined; // 'undefined'
typeof Math.abs; // 'function'
typeof null; // 'object'
typeof []; // 'object'
typeof {}; // 'object'  用typeof無法區分出nullArray和通常意義上的object——{}

2.包裝對象:

var n = new Number(123); // 123,生成了新的包裝類型
var b = new Boolean(true); // true,生成了新的包裝類型
var s = new String('str'); // 'str',生成了新的包裝類型
typeof new Number(123); // 'object'
new Number(123) === 123; // false
typeof new Boolean(true); // 'object'
new Boolean(true) === true; // false
typeof new String('str'); // 'object'   包裝使他們的類型變成了object
new String('str') === 'str'; // false    所以對于string類型,最好不要包裝對象。

正確的轉換法是不用new

var n = Number('123'); // 123,相當于parseInt()或parseFloat()
typeof n; // 'number'var b = Boolean('true'); // true
typeof b; // 'boolean'var b2 = Boolean('false'); // true! 'false'字符串轉換結果為true!因為它是非空字符串!
var b3 = Boolean(''); // falsevar s = String(123.45); // '123.45'
typeof s; // 'string'

總結一下,有這么幾條規則需要遵守:

  • 不要使用new Number()new Boolean()new String()創建包裝對象;

  • parseInt()parseFloat()來轉換任意類型到number

  • String()來轉換任意類型到string,或者直接調用某個對象的toString()方法;

  • nullundefined沒有toString()方法。數字對象的toString()方法要這樣寫:

    123.toString(); // SyntaxError
    123..toString(); // '123', 注意是兩個點!
    (123).toString(); // '123'3.14.toString();   // '3.14'
    3.14..toString();  // SyntaxError
    (3.14).toString(); //'3.14' 
    // 第一個點是指小數點,第二個點才是調用toString()方法,所以3.14不需要用兩個點調用toString()方法
  • 通常不必把任意類型轉換為boolean再判斷,因為可以直接寫if (myVar) {...}

  • typeof操作符可以判斷出numberbooleanstringfunctionundefined

  • 判斷Array要使用Array.isArray(arr)

  • 判斷null請使用myVar === null

  • 判斷某個全局變量是否存在,用typeof window.myVar === 'undefined'

  • 函數內部判斷某個變量是否存在,用typeof myVar === 'undefined'

3.Date對象,獲取本機系統當前時間:

var now = new Date();
now; // Wed Jun 24 2015 19:49:22 GMT+0800 (CST)
now.getFullYear(); // 2015, 年份
now.getMonth(); // 5, 月份,注意月份范圍是0~11,5表示六月
now.getDate(); // 24, 表示24號
now.getDay(); // 3, 表示星期三
now.getHours(); // 19, 24小時制
now.getMinutes(); // 49, 分鐘
now.getSeconds(); // 22, 秒
now.getMilliseconds(); // 875, 毫秒數
now.getTime(); // 1435146562875, 以number形式表示的時間戳

創建一個指定日期和時間的Date對象:

var d = new Date(2015, 5, 19, 20, 15, 30, 123);
d; // Fri Jun 19 2015 20:15:30 GMT+0800 (CST)
//注意JavaScript的月份范圍用整數表示是0~11,0表示一月,1表示二月……//或者這樣也能創建:
var a = Date.parse('2015-06-24T19:49:22.875+08:00');
a; // 1435146562875    返回一個時間戳//可以再如下轉換:
var c = new Date(1435146562875);
c; // Wed Jun 24 2015 19:49:22 GMT+0800 (CST)
c.toLocaleString(); // '2015/6/24 下午7:49:22',本地時間(北京時區+8:00),顯示的字符串與操作系統設定的格式有關
c.toUTCString(); // 'Wed, 24 Jun 2015 11:49:22 GMT',UTC時間(世界標準時間),與本地時間相差8小時   科普:格林威治標準時間GMT

4.正則表達式,如果直接給出字符,就是精確匹配。用\d可以匹配一個數字,\w可以匹配一個字母或數字,用.可以匹配任意字符

?? *表示任意個字符(包括0個),用+表示至少一個字符,用?表示0個或1個字符,用{n}表示n個字符,用{n,m}表示n-m個字符

?\s可以匹配一個空格(也包括Tab(/t)等空白符)

?? 例如:要匹配'010-12345'這樣的號碼,由于'-'是特殊字符,在正則表達式中,要用'\'轉義,所以正則是\d{3}\-\d{3,8}

?? 還能可以用[]表示范圍 :[a-zA-Z\_\$][0-9a-zA-Z\_\$]*可以匹配由字母或下劃線、$開頭,后接任意個由一個數字、字母或者下劃線、$組成的字符串,也就是JavaScript允許的變量名;

??? A|B可以匹配A或B,所以(J|j)ava(S|s)cript可以匹配'JavaScript''Javascript''javaScript'或者'javascript'

? ^表示行的開頭,^\d表示必須以數字開頭。

? $表示行的結束,\d$表示必須以數字結束。

5.RegExp。正則表達式。

寫正則表達式的兩種方法:

var re1 = /ABC\-001/;
var re2 = new RegExp('ABC\\-001'); //注意是兩\\,轉義
re1; // /ABC\-001/
re2; // /ABC\-001/

RegExp對象的test()方法用于測試給定的字符串是否符合條件:

var re = /^\d{3}\-\d{3,8}$/;
re.test('010-12345'); // true
re.test('010-1234x'); // false
re.test('010 12345'); // false

正則表達式切分字符串十分好用:

'a b   c'.split(' '); // ['a', 'b', '', '', 'c']   不用正則的話
'a b   c'.split(/\s+/); // ['a', 'b', 'c']    用正則,把空格忽略掉
'a,b, c  d'.split(/[\s\,]+/); // ['a', 'b', 'c', 'd']  把空格和,忽略掉
'a,b;; c  d'.split(/[\s\,\;]+/); // ['a', 'b', 'c', 'd']   把空格和,和;都忽略掉

()表示要提取的分組,再用exec()方法提取出子串:

var re = /^(\d{3})-(\d{3,8})$/;   // 這里不再需要\-
re.exec('010-12345'); // ['010-12345', '010', '12345']
re.exec('010 12345'); // null  匹配失敗返回null

貪婪匹配,匹配盡可能多的字符:

var re = /^(\d+)(0*)$/;
re.exec('102300'); // ['102300', '102300', '']   \d+把數字全部匹配了,所以0*無法匹配到0

非貪婪匹配,也就是盡可能少匹配:

var re = /^(\d+?)(0*)$/;   // 想要的非貪婪項后面加?號
re.exec('102300'); // ['102300', '1023', '00']

特殊的標志:g標志,表示全局匹配。全局匹配類似搜索,因此不能使用/^...$/,那樣只會最多匹配一次。

??????????????? i標志,表示忽略大小寫。m標志,表示執行多行匹配。

var r1 = /test/g;
// 等價于:
var r2 = new RegExp('test', 'g');
var s = 'JavaScript,VBScript,JScript and ECMAScript';
var re=/[a-zA-Z]+Script/g;// 使用全局匹配:
re.exec(s); // ['JavaScript']   每次返回一個元素,與直接用exec,全部值一起返回不同。
re.lastIndex; // 10  最后所在的位置

re.exec(s); // ['VBScript']
re.lastIndex; // 19

re.exec(s); // ['JScript']
re.lastIndex; // 27

re.exec(s); // ['ECMAScript']
re.lastIndex; // 42

re.exec(s); // null,表示匹配結束了,全部符合條件的都已經找出來了,再調用就從第一個開始循環。

6.在JSON中,一共就這么幾種數據類型:

  • number:和JavaScript的number完全一致;
  • boolean:就是JavaScript的truefalse
  • string:就是JavaScript的string
  • null:就是JavaScript的null
  • array:就是JavaScript的Array表示方式——[]
  • object:就是JavaScript的{ ... }表示方式。

JSON的字符串規定必須用雙引號"",Object的鍵也必須用雙引號""

把對象序列化成JSON格式的字符串:

var xiaoming = {name: '小明',age: 14,gender: true,height: 1.65,grade: null,'middle-school': '\"W3C\" Middle School',skills: ['JavaScript', 'Java', 'Python', 'Lisp']
};JSON.stringify(xiaoming); // '{"name":"小明","age":14,"gender":true,"height":1.65,"grade":null,"middle-school":"\"W3C\" Middle School","skills":["JavaScript","Java","Python","Lisp"]}'

按縮進輸出:

JSON.stringify(xiaoming, null, '  ');
/*結果如下
{"name": "小明","age": 14,"gender": true,"height": 1.65,"grade": null,"middle-school": "\"W3C\" Middle School","skills": ["JavaScript","Java","Python","Lisp"] }
*/

指定屬性輸出:

JSON.stringify(xiaoming, ['name', 'skills'], '  ');
/*結果如下
{"name": "小明","skills": ["JavaScript","Java","Python","Lisp"]
}
*/

或者用toJSON()的方法指定屬性序列化輸出:

var xiaoming = {name: '小明',age: 14,gender: true,height: 1.65,grade: null,'middle-school': '\"W3C\" Middle School',skills: ['JavaScript', 'Java', 'Python', 'Lisp'],toJSON: function () {return { // 只輸出name和age,并且改變了key:'Name': this.name,'Age': this.age};}
};JSON.stringify(xiaoming); // '{"Name":"小明","Age":14}'

還可以傳入一個函數作為參數:

function convert(key, value) {if (typeof value === 'string') {return value.toUpperCase();}return value;
}JSON.stringify(xiaoming, convert, '  ');
/*結果如下,全部字符串變大寫
{"name": "小明","age": 14,"gender": true,"height": 1.65,"grade": null,"middle-school": "\"W3C\" MIDDLE SCHOOL","skills": ["JAVASCRIPT","JAVA","PYTHON","LISP"]
}
*/

7.反序列化,把JSON格式的字符串還原成JavaScript對象:

JSON.parse('[1,2,3,true]'); // [1, 2, 3, true]
JSON.parse('{"name":"小明","age":14}'); // Object {name: '小明', age: 14}
JSON.parse('true'); // true
JSON.parse('123.45'); // 123.45

JSON.parse()還可以接收一個函數,用來轉換解析出的屬性

JSON.parse('{"name":"小明","age":14}', function (key, value) {// 把number * 2:if (key === 'name') {return value + '同學';}return value;
}); // Object {name: '小明同學', age: 14}

?

轉載于:https://www.cnblogs.com/shen076/p/6169437.html

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

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

相關文章

【ArcGIS風暴】ArcGIS創建柵格數據集色彩映射表案例--以GlobeLand30土地覆蓋數據為例

矢量數據快速符號化,可以將常用的樣式保存到樣式符號庫,柵格數據快速符號化,需要創建色彩映射表。本文以GlobeLand30土地覆蓋數據為例,詳解ArcGIS中創建與使用色彩映射表。 文章目錄一、 ArcGIS色彩映射表介紹二、土地覆蓋數據色彩…

Visual Studio 2019 16.3.10 初體驗

Visual Studio 2019 版本 16.3.10 發布時間:2019 年 11 月 20 日 官網地址:https://visualstudio.microsoft.com/zh-hans/vs/ 介紹: https://devblogs.microsoft.com/visualstudio/dot-net-core-support-in-visual-studio-2019-version-16…

【ArcGIS風暴】GlobeLand30全球數據處理教程(批量投影轉換、無效值處理、拼接)

本文講述GlobeLand30全球數據批處理流程,主要步驟包括:批量分幅投影轉換、批量分幅無效值處理、批量圖幅拼接和成品展示。由于圖幅數目和數據量較大,本文是采用Python代碼批量實現的,有關Python的基本操作及處理案例,可…

Docker 私有倉庫的搭建

Docker在2015年推出了distribution項目,即Docker Registry 2。相比于old registry,Registry 2使用Go實現,在安全性、性能方面均有大幅改進。Registry設計了全新的Rest API,并且在image存儲格式等方面不再兼容于old Registry。去年…

請查收.NET MAUI 的最新學習資源

點擊上方藍字關注我們(本文閱讀時間:3分鐘)2022 年 5 月 23 日,.NET MAUI 正式發布。.NET MAUI 為您提供了一流的跨平臺 UI 堆棧,面向 Android、iOS、macOS 和 Windows。我們很高興地宣布,有幾種不同的學習 .NET MAUI …

C語言試題151之求 0到7 所能組成的奇數個數。

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款模擬面試、刷題神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:求 0—7 所能組成的奇數個數…

騰訊2016春招之算法編程解析

第一道題:求有刪除情況的最長回文子串 題目: 解題思路: 這個題嚴格意義上來說,刪除了字符就談不上回文串了,既然有刪除,那估計考察的不是回文串,而是其他的,但是這個東西又有回文串的…

Windows下Visual studio 2013 編譯 Audacity

編譯的Audacity版本為2.1.2,由于實在windows下編譯,其源代碼可以從Github上取得 git clone https://github.com/audacity/audacity。 1. 編譯WxWidgets Audacity使用wxWidgets作為GUI的框架,Audacity2.1.2需要wxWidgets 3.0.2,所以…

[轉]解決Android studio升級到3.5的一些問題

最近Android studio升級到最新的3.5以后,出現了很多問題,記錄一下: 1.NDK Resolution Outcome: Project settings: Gradle model version5.4.1, NDK version is UNKNOWN 這個是因為升級到3.5以后,原來的ndk被刪除了,在…

【EPS精品教程】EPS2016三維測圖版安裝教程(附EPS2016安裝包下載地址)

文章目錄 一、安裝過程二、軟件安裝包下載EPS地理信息工作站是北京清華山維新技術開發有限公司歷經十五年精心研發和打造,為滿足“以地理信息服務為中心”的信息化測繪生產需求而推出的測繪生產活動多種業務模塊集成化軟件系統。主要功能有: (1)測繪與地理信息多業務模塊集…

據廖雪峰python3教程----python學習第十三天

在OOP程序設計中,當我們定義一個class的時候,可以從某個現有的class繼承,新的class稱為子類(Subclass),而被繼承的class稱為基類、父類或超類(Base class、Super class)。 編寫一個名…

《增廣賢文》

(《增廣賢文》),并非吾原創。其中人生之道理,今之看來,雖有偏激之處,未嘗不有警醒之用。吾輩取精去糟,察納雅言即可。———————————————————————————————————…

禁錮自己的因素,原來有這么多

2022年的7月,朋友圈都能看到喜慶的時刻,慶祝香港回歸25周年,這確實是一個具有偉大里程碑的意義。同時也是建黨101周年,滿滿的榮譽感,隔著朋友圈都能感受到喜慶。家事國事天下事,事事關心,關心但…

C語言試題152之一個偶數總能表示為兩個素數之和

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款模擬面試、刷題神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:一個偶數總能表示為兩個素數…

[轉]Xshell連接win10 Linux子系統

配置SSH服務: sudo apt-get remove --purge openssh-server ## 先刪ssh sudo apt-get install openssh-server ## 在安裝ssh sudo rm /etc/ssh/ssh_config ## 刪配置文件,讓ssh服務自己想辦法鏈接 sudo service ssh --full…

有兩個地方,用到了javabean對象和屬性字符串值之間的轉換

1.有兩個地方,用到了javabean對象和屬性字符串值之間的轉換 2.一個是接入層spring mvc,將json字符串參數轉換為javaBean。通過RequestBody javaBean方式 3.另一個是,mybatis中javeBean對象與數據庫字段值之間的轉換。 在sql語句的insert/upda…

【EPS精品教程】EPS2016三維測圖軟件常用快捷鍵(建議收藏)

EPS2016三維測圖軟件常用快捷鍵(建議收藏) 狀 態鍵盤位置功能名稱功能描述選擇Shift拖點按下鼠標左鍵移動光標,將目標點拖到其他位置C閉合使打開的當前線閉合,閉合的當前線打開X回退一點從當前點回退一點Shift+X回退多點從當前點開始刪除多點(到光標指向點)Ctrl+T刪除刪除當…

記一個并發規則驗證實現

最近在做一個簡單的風控,其中有一塊需求是這樣的,當主請求參數到達后,會根據這些參數,看調起幾個并發規則,這些規則各自有自己的驗證邏輯,每個規則執行時間長短都不確定,當規則 執行完后&#x…

EIGRP個人學習筆記

【理論部分】1、EIGRP的主要特征:①Cisco專有協議(高級dv路由);②支持VLSM; ③觸發、增量更新;---------減少帶寬的占用④支持多層網絡協議ApplleTalk,IP 和 Novell Netware等協議;⑤收斂速度快;----------采用dual算法…

C語言試題153之判斷一個素數能被幾個 9 整除

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款模擬面試、刷題神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:判斷一個素數能被幾個 9 整除…