日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JavaScript全面学习(中阶)

發(fā)布時間:2023/12/9 javascript 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaScript全面学习(中阶) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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無法區(qū)分出null、Array和通常意義上的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'

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

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

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

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

  • null和undefined沒有toString()方法。數(shù)字對象的toString()方法要這樣寫:

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

  • typeof操作符可以判斷出number、boolean、string、function和undefined;

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

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

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

  • 函數(shù)內(nèi)部判斷某個變量是否存在,用typeof myVar === 'undefined'。

3.Date對象,獲取本機系統(tǒng)當前時間:

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, 毫秒數(shù) now.getTime(); // 1435146562875, 以number形式表示的時間戳

創(chuàng)建一個指定日期和時間的Date對象:

var d = new Date(2015, 5, 19, 20, 15, 30, 123); d; // Fri Jun 19 2015 20:15:30 GMT+0800 (CST) //注意JavaScript的月份范圍用整數(shù)表示是0~11,0表示一月,1表示二月……//或者這樣也能創(chuàng)建: 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',本地時間(北京時區(qū)+8:00),顯示的字符串與操作系統(tǒng)設定的格式有關 c.toUTCString(); // 'Wed, 24 Jun 2015 11:49:22 GMT',UTC時間(世界標準時間),與本地時間相差8小時 科普:格林威治標準時間GMT

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

?? *表示任意個字符(包括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\_\$]*可以匹配由字母或下劃線、$開頭,后接任意個由一個數(shù)字、字母或者下劃線、$組成的字符串,也就是JavaScript允許的變量名;

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

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

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

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+把數(shù)字全部匹配了,所以0*無法匹配到0

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

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

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

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

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,表示匹配結束了,全部符合條件的都已經(jīng)找出來了,再調(diào)用就從第一個開始循環(huán)。

6.在JSON中,一共就這么幾種數(shù)據(jù)類型:

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

JSON的字符串規(guī)定必須用雙引號"",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}'

還可以傳入一個函數(shù)作為參數(shù):

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()還可以接收一個函數(shù),用來轉換解析出的屬性

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

總結

以上是生活随笔為你收集整理的JavaScript全面学习(中阶)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。