亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

JavaScript中常用的簡潔高級技巧總結

2024-05-06 16:48:54
字體:
來源:轉載
供稿:網友

前言

編程是一件很快樂的事,實現一個目的,我們可以有很多方法路徑,在這篇文章我們介紹一些JavaScript的奇技淫巧,僅供大家參考,各路大神在平時的代碼編寫時,如很多簡潔高效的書寫方式;

下面話不多說了,來一起看看詳細的介紹吧

一、數據類型檢測

1.1 typeof

typeof操作符返回一個字符串,表示未經計算的操作數的類型;該運算符數據類型(返回字符串,對應列表如圖)

JavaScript,高級技巧

1.2 instanceof

var str = "This is a simple string"; var num = 1111;var boolean = true;var und = undefined;var nl = null;var sb = Symbol('1111');var obj = {}; // 非原始類型數據字面量定義console.log(str instanceof String);  // falseconsole.log(num instanceof Number);  // falseconsole.log(boolean instanceof Boolean); // falseconsole.log(nl instanceof Object);  // falseconsole.log(sb instanceof Symbol);  // falseconsole.log(obj instanceof Object);  // truevar strN = new String("This is a simple string");var numN = new Number(1111);var booleanN = new Boolean(true);var objN = new Object();console.log(strN instanceof String);  // trueconsole.log(numN instanceof Number);  // trueconsole.log(booleanN instanceof Boolean); // trueconsole.log(objN instanceof Object);  // true

instanceof運算符用于測試構造函數的prototype屬性是否出現在對象的原型鏈中的任何位置;

由上結果,字面量產出的原始數據類型無法使用instanceof判斷。

1.3 Object.propotype.toString

Object.prototype.toString.call('string'); //"[object String]"Object.prototype.toString.call(1111);  //"[object Number]"Object.prototype.toString.call(true);  //"[object Boolean]"Object.prototype.toString.call(null);  //"[object Null]"Object.prototype.toString.call(undefined); //"[object Undefined]"Object.prototype.toString.call(Symbol('111')); //"[object Symbol]"Object.prototype.toString.call({});  //"[object Object]"

上述方法最為便捷有效

1.4 constructor

比較對象的構造函數與類的構造函數是否相等

var a = {}a.constructor === Object // truevar b = '111';b.constructor === String // truevar strN = new String('11111');strN.constructor === String // truevar c = true;c.constructor === Boolean // truevar d = Symbol('symbol')d.constructor === Symbol // true

1.5 propotype

比較對象的原型與構造函數的原型是否相等

var a = {}a.__proto__ === Object.prototype // truevar t = new Date();t.__proto__ === Date.prototype // truevar str = 'sting';str.__proto__ === String.prototype // truevar strN = new String('11111');strN.__proto__ === String.prototype // true

二、數據特殊操作

2.1 交換兩個值

2.1.1 利用一個數異或本身等于0和異或運算符合交換率

var a = 3;var b = 4a ^= b; // a = a ^ bb ^= a;a ^= b;console.log(a, b);

2.1.2 使用ES6解構賦值

let a = 1;let b = 2;[b, a] = [a, b];console.log(a, b);

2.2 小數取整

var num = 123.123// 常用方法console.log(parseInt(num)); // 123// “雙按位非”操作符console.log(~~ num); // 123// 按位或console.log(num | 0); // 123// 按位異或console.log(num ^ 0); // 123// 左移操作符console.log(num << 0); // 123

2.3 數字金額千分位格式化

2.3.1 使用Number.prototype.toLocaleString()

var num = 123455678;var num1 = 123455678.12345;var formatNum = num.toLocaleString('en-US');var formatNum1 = num1.toLocaleString('en-US');console.log(formatNum); // 123,455,678console.log(formatNum1); // 123,455,678.123

2.3.2 使用正則表達式

var num = 123455678;var num1 = 123455678.12345;var formatNum = String(num).replace(//B(?=(/d{3})+(?!/d))/g, ',');var formatNum1 = String(num1).replace(//B(?=(/d{3})+(?!/d))/g, ',');console.log(formatNum); // 123,455,678console.log(formatNum1); // 123,455,678.12,345

三、對象數據常用操作

3.1 深度克隆技巧

3.1.1 JSON.stringify 轉換成字符, JSON.parse重新生成JSON數據類型

function deepClone(obj) { return JSON.parse(JSON.stringify(obj));}var obj = { number: 1, string: 'abc', bool: true, undefined: undefined, null: null, symbol: Symbol('s'), arr: [1, 2, 3], date: new Date(), userInfo: {  name: 'Better',  position: 'front-end engineer',  skill: ['React', 'Vue', 'Angular', 'Nodejs', 'mini programs'] }, func: function () {  console.log('hello better'); }}console.log(deepClone(obj))

從打印結果可以得出以下結論:

  • undefined、symbol、function 類型直接被過濾掉了
  • date 類型被自動轉成了字符串類型

3.1.2 常用方式 簡單遞歸

function deepClone(obj) { var newObj = obj instanceof Array ? [] : {}; for (let i in obj) {  newObj[i] = typeof obj[i] === 'object' ? deepClone(obj[i]) : obj[i] } return newObj;}var obj = { number: 1, string: 'abc', bool: true, undefined: undefined, null: null, symbol: Symbol('s'), arr: [1, 2, 3], date: new Date(), userInfo: {  name: 'Better',  position: 'front-end engineer',  skill: ['React', 'Vue', 'Angular', 'Nodejs', 'mini programs'] }, func: function () {  console.log('hello better'); }}console.log(deepClone(obj))

從打印的結果來看,這種實現方式還存在很多問題:這種方式只能實現特定的object的深度復制(比如對象、數組和函數),不能實現null以及包裝對象Number,String ,Boolean,以及Date對象,RegExp對象的復制。

3.2 對象遍歷方式

3.2.1 for-in

function A() {	this.a = 1	this.b = 1}A.prototype = {	c: 1,	d: 2}var a = new A()for(var i in a) { console.log(i)}

由上打印結果可知,for-in 會遍歷對象屬性,包括原型鏈中的屬性

3.2.2 Object.entries()

function A() {	this.a = 1	this.b = 1}A.prototype = {	c: 1,	d: 2}var a = new A()var et = Object.entries(a)console.log(et)

由上結果可知,entries 返回一個給定對象自身可枚舉屬性的鍵值對數組

3.2.3 Object.keys()、 Object.values()

function A() {	this.a = 1	this.b = 1}A.prototype = {	c: 1,	d: 2}var a = new A()var keys = Object.keys(a)var values = Object.values(a)console.log(keys, values)

由上結果可知,keys, values 返回一個給定對象自身可枚舉屬性數組,自身可枚舉屬性值的數組

四、數組常用操作

4.1 數組去重

4.1.1 Set 去重

var arr = [1,2,1,1,22,4,5,6];arr1 = [...new Set(arr)];

4.1.2 結合使用數組filter方法和indexOf()方法

var arr = [1, 2, 3, 2, 6, '2', 3, 1];function uniqueArr (arr) { return arr.filter(function (ele, index, array) {  // 利用數組indexOf()方法,返回找到的第一個值的索引  // 如果數組元素的索引值與indexOf方法查找返回的值不相等,則說明該值重復了,直接過濾掉  return array.indexOf(ele) === index; })}

4.2 多維數組一行代碼實現一維轉換

var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];var resultArr = arr.toString().split(',').map(Number);console.log(resultArr); // [1, 2, 2, 3, 4, 5, 5, 6, 7, 8, 9, 11, 12, 12, 13, 14, 10]

4.3 一行代碼實現獲取一個網頁使用了多少種標簽

[...new Set([...document.querySelectorAll('*')].map(node => node.tagName))].length;

4.4 如何實現a == 1 && a == 2 && a == 3

4.4.1  改寫數組的toString方法

var a = [1, 2, 3];// a.join = a.shift;// a.valueOf = a.shift;a.toString = a.shift;console.log(a == 1 && a == 2 && a == 3); // true

原理:當復雜類型數據與基本類型數據作比較時會發生隱性轉換,會調用toString()或者valueOf()方法

4.4.2  改寫對象的toString方法

var a = { value: 1, toString: function () {  return a.value++; }}console.log(a == 1 && a == 2 && a == 3); // true

4.5 統計字符串中相同字符出現的次數

var str = 'aaabbbccc66aabbc6';var strInfo = str.split('').reduce((p, c) => (p[c]++ || (p[c] = 1), p), {});console.log(strInfo); // {6: 3, a: 5, b: 5, c: 4}

4.6 將類數組對象轉成數組

4.6.1 使用Array.prototype.slice

var likeArrObj = { 0: 1, 1: 2, 2: 3, length: 3}var arr1 = Array.prototype.slice.call(likeArrObj); // 或者使用[].slice.call(likeArrObj);console.log(arr1); // [1, 2, 3]

4.6.2 使用Array.from

var likeArrObj = { 0: 1, 1: 2, 2: 3, length: 3}var arr = Array.from(likeArrObj);console.log(arr); // [1, 2, 3]

4.6.3 使用Object.values (此處省略)

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产亚洲免费的视频看| 91情侣偷在线精品国产| 久久久久在线观看| 国产精品久久久亚洲| 91tv亚洲精品香蕉国产一区7ujn| 欧美日韩第一视频| 伊人青青综合网站| 欧美性xxxxx极品娇小| 日韩成人av一区| 久久亚洲电影天堂| 大荫蒂欧美视频另类xxxx| 久久中国妇女中文字幕| 久青草国产97香蕉在线视频| 色av吧综合网| 91精品中国老女人| 国产91精品高潮白浆喷水| 91丝袜美腿美女视频网站| 亚洲精品在线不卡| 国产99视频在线观看| 欧美专区国产专区| 国产不卡av在线免费观看| 红桃视频成人在线观看| 欧美日韩国产丝袜美女| 日韩不卡在线观看| 中文字幕亚洲在线| 国产一区二区在线免费视频| 欧美国产精品日韩| 亚洲午夜未满十八勿入免费观看全集| 国产精品久久久久久久app| 成人精品一区二区三区电影黑人| 亚洲成人教育av| 久久国产加勒比精品无码| 国产精品美女视频网站| 黄色精品一区二区| 夜夜躁日日躁狠狠久久88av| 欧美在线一级视频| 一区二区三区视频观看| 亚洲精品影视在线观看| 狠狠综合久久av一区二区小说| 欧美电影免费观看高清完整| 国产一区在线播放| 久久69精品久久久久久国产越南| 国产精品观看在线亚洲人成网| 国产a级全部精品| 久久免费观看视频| 久久久噜久噜久久综合| 国产亚洲日本欧美韩国| 成人午夜黄色影院| 亚洲国产精品人人爽夜夜爽| 欧美一级高清免费播放| 欧美日韩综合视频| 国产成人精品免高潮费视频| 久久久久久噜噜噜久久久精品| 色一区av在线| 欧美做受高潮电影o| 欧美视频专区一二在线观看| 成人免费午夜电影| 97精品国产aⅴ7777| www.欧美三级电影.com| 精品国内自产拍在线观看| 蜜臀久久99精品久久久久久宅男| 国产精品亚发布| 欧美性69xxxx肥| 色偷偷av亚洲男人的天堂| 亚洲精品91美女久久久久久久| 国产精品99久久久久久www| 久久天天躁狠狠躁夜夜爽蜜月| 精品日本美女福利在线观看| 精品人伦一区二区三区蜜桃免费| 欧美高清激情视频| 国产精品96久久久久久又黄又硬| 91探花福利精品国产自产在线| 日韩欧美精品免费在线| 国产精品丝袜白浆摸在线| 欧洲美女7788成人免费视频| 欧美性猛交丰臀xxxxx网站| 久热99视频在线观看| 久久久久久国产三级电影| 中文字幕亚洲欧美日韩在线不卡| 97**国产露脸精品国产| 久久成人精品视频| 国产精品爱啪在线线免费观看| 国产精品视频播放| www.亚洲成人| 一区二区三区视频免费在线观看| 日韩中文在线中文网在线观看| 精品国产老师黑色丝袜高跟鞋| 欧美日本高清视频| 欧美高清视频一区二区| 成人亚洲欧美一区二区三区| 51久久精品夜色国产麻豆| 日本精品免费一区二区三区| 粉嫩av一区二区三区免费野| 国产成人精品电影| 国产精品亚洲自拍| 亚洲跨种族黑人xxx| 久久久久久免费精品| 成人国产精品一区二区| 日本精品免费一区二区三区| 亚洲最新视频在线| 亚洲精品在线不卡| 亚洲欧美在线磁力| 国产成人久久久精品一区| 日韩中文字幕欧美| 欧美成人免费在线观看| 国产婷婷97碰碰久久人人蜜臀| 国产精品pans私拍| 亚洲电影免费观看高清完整版在线观看| 国产精品一区专区欧美日韩| 日本精品视频网站| 中文字幕一区二区精品| 黑人巨大精品欧美一区免费视频| 久精品免费视频| 日韩精品中文在线观看| 亚洲欧洲美洲在线综合| 成人在线观看视频网站| 精品日本高清在线播放| 中文字幕久精品免费视频| 国产自产女人91一区在线观看| 亚洲一级黄色片| 91免费观看网站| 成人精品视频久久久久| 麻豆国产va免费精品高清在线| 国产精品丝袜白浆摸在线| 成人啪啪免费看| 97久久精品人人澡人人爽缅北| 国产欧美婷婷中文| 97久久久免费福利网址| 色小说视频一区| 亚洲国产日韩欧美在线图片| 久久久久久久久久婷婷| 欧美日韩国产中文精品字幕自在自线| 亚洲精品久久久久中文字幕二区| 日本国产精品视频| 欧美三级免费观看| 欧美在线视频观看| 国产国产精品人在线视| 亚洲精品一区二区在线| 国产精品美腿一区在线看| 日本高清+成人网在线观看| 国产97在线亚洲| 国内精品久久久久久久| 国产精品美乳在线观看| 成人乱人伦精品视频在线观看| 亚洲最大av在线| 日韩理论片久久| 夜夜狂射影院欧美极品| 国产成人涩涩涩视频在线观看| 亚洲激情电影中文字幕| 久久人人爽国产| 亚洲欧洲成视频免费观看| 精品国产一区二区三区在线观看| 2021国产精品视频| 精品久久久久久中文字幕一区奶水| 欧美肥臀大乳一区二区免费视频| 国产精品爽黄69| 欧美精品免费看| 欧美在线视频免费| 2019中文在线观看| 国产精品久久在线观看| 好吊成人免视频| 欧美国产日本高清在线| 亚洲欧洲av一区二区| 中文字幕精品一区久久久久|