电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

JavaScript編碼小技巧分享

瀏覽:62日期:2023-10-13 11:19:07

三元操作符

如果使用if...else語句,那么這是一個很好節省代碼的方式。

const x = 20;let big;if (x > 10) {big = true;} else {big = false;}//這樣寫...const big = x > 10 ? true : false;

Short-circuit Evaluation

分配一個變量值到另一個變量的時候,你可能想要確保變量不是null、undefined或空。你可以寫一個有多個if的條件語句或者Short-circuit Evaluation。

if (variable1 !== null || variable1 !== undefined || variable1 !== ’’) { let variable2 = variable1;}// 這樣寫const variable2 = variable1 || ’new’;

不要相信我,請先相信自己的測試(可以把下面的代碼粘貼在es6console)

let variable1;let variable2 = variable1 || ’’;console.log(variable2 === ’’); // truevariable1 = ’foo’;variable2 = variable1 || ’’;console.log(variable2); // foo

聲明變量

在函數中聲明變量時,像下面這樣同時聲明多個變量可以節省你大量的時間和空間:

let x;let y;let x = 3;// or let x, y, z = 3;

如果存在

這可能是微不足道的,但值得提及。做“如果檢查”時,賦值操作符有時可以省略。

if (likeJavaScript === true)//orif (likeJavaScript)

注:這兩種方法并不完全相同,簡寫檢查只要likeJavaScript是true都將通過。

這有另一個示例。如果a不是true,然后做什么。

let a;if (a !== true) {// do something ...}//orlet a;if (!a) {// do something ...}

JavaScript的for循環

如果你只想要原生的JavaScript,而不想依賴于jQuery或Lodash這樣的外部庫,那這個小技巧是非常有用的。

for (let i = 0; i < allImgs.length; i++)//orfor (let index in allImgs)

Array.forEach簡寫:

function logArrayElements(element, index, array) {console.log(’a[’ + index + ’]=’ + element);}[2, 5, 9].forEach(logArrayElements);// logs:// a[0] = 2// a[1] = 5// a[2] = 9

對象屬性

定義對象文字(Object literals)讓JavaScript變得更有趣。ES6提供了一個更簡單的辦法來分配對象的屬性。如果屬性名和值一樣,你可以使用下面簡寫的方式。

const obj = {x: x, y: y};//orconst obj = {x, y};

箭頭函數

經典函數很容易讀和寫,但它們確實會變得有點冗長,特別是嵌套函數中調用其他函數時還會讓你感到困惑。

function sayHello(name) {console.log(’Hello’, name);}setTimeout(function() {console.log(’Loaded’)}, 2000);list.forEach(function(item){console.log(item)})//orsayHello = name => console.log(’Hello’, name);setTimeout(() => console.log(’Loaded’), 2000);list.forEach(item => console.log(item));

隱式返回

return在函數中經常使用到的一個關鍵詞,將返回函數的最終結果。箭頭函數用一個語句將隱式的返回結果(函數必須省略{},為了省略return關鍵詞)。

如果返回一個多行語句(比如對象),有必要在函數體內使用()替代{}。這樣可以確保代碼是否作為一個單獨的語句返回。

function calcCircumference(diameter) {return Math.PI * diameter}//orcalcCircumference = diameter => (Math.PI * diameter;)

默認參數值

你可以使用if語句來定義函數參數的默認值。在ES6中,可以在函數聲明中定義默認值。

function volume(l, w, h) {if (w === undefined) w = 3;if (h === undefined) h = 4;return l * w * h;}//orvolume = (l, w = 3, h = 4) => (l * w * h);volume(2); // 24

Template Literals(字符串模板)

是不是厭倦了使用+來連接多個變量變成一個字符串?難道就沒有一個更容易的方法嗎?如果你能使用ES6,那么你是幸運的。在ES6中,你要做的是使用撇號和${},并且把你的變量放在大括號內。

const welcome = ’You have logged in as’ + first + ’ ’ + last + ’.’;const db = ’http://’ + host + ’:’ + port + ’/’ + database;//orconst welcome = `You have logged in as ${first} ${last}`;const db = `http://${host}:${port}/${database}`;

Destructuring Assignment(解構賦值)

const observable = require(’mobx/observable’);const action = require(’mobx/action’);const runInAction = require(’mobx/runInAction’);const store = this.props.store;const form = this.props.form;const loading = this.props.loading;const errors = this.props.errors;const entity = this.props.entity;//orimport {observable, action, runInAction} from ’mobx’;const {store, form, loading, errors, entity} = this.props;

你甚至可以自己指定變量名:

const {store, form, loading, errors, entity:contact} = this.props; //通過 : 號來重命名

Spread Operator(擴展運算符)

Spread Operator是ES6中引入的,使JavaScript代碼更高效和有趣。它可以用來代替某些數組的功能。Spread Operator只是一個系列的三個點(...)。

// Joining arraysconst odd = [1, 3, 5];const nums = [2, 4, 6].concat(odd);// cloning arraysconst arr = [1, 2, 3, 4];const arr2 = arr.slice();//or// Joining arraysconst odd = [1, 3, 5];const nums = [2, 4, 6, ...odd];console.log(nums); // [2, 4, 6, 1, 3, 5]// cloning arraysconst arr = [1, 2, 3, 4];const arr2 = [...arr];

不像concat()函數,使用Spread Operator你可以將一個數組插入到另一個數組的任何地方。

const odd = [1, 3, 5];const nums = [2, ...odd, 4, 6];

另外還可以當作解構符:

const {a, b, ...z} = {a: 1, b: 2, c: 3, d: 4};console.log(a); // 1console.log(b); // 2console.log(z); // {c: 3, d: 4}

強制參數

function foo(bar) {if (bar === undefined) {throw new Error(’Missing parameter!’); }return bar;}//ormandatory = () => {throw new Error(’Missing parameter!’);}foo = (bar = mandatory()) => {return bar;}

Array.find

如果你以前寫過一個查找函數,你可能會使用一個for循環。在ES6中,你可以使用數組的一個新功能find()。

const pets = [ {type: ’Dog’, name: ’Max’}, {type: ’Cat’, name: ’Karl’}, {type: ’Dog’, name: ’Tommy’}]function findDog(name) {for (let i = 0; i < pets.length; ++i) {if (pets[i].type === ’Dog’ && pets[i].name === name) {return pets[i]; } }} // orpet = pets.find(pet => pet.type === ’Dog’ && pet.name === ’Tommy’);console.log(pet); // {type: ’Dog’, name: ’Tommy’}

Object[key]

你知道Foo.bar也可以寫成Foo[bar]吧。起初,似乎沒有理由應該這樣寫。然而,這個符號可以讓你編寫可重用代碼塊。

function validate(values) {if (!values.first)return false;if (!values.last)return false;return true;}console.log(validate({first: ’Bruce’, last: ’Wayne’})); // true

這個函數可以正常工作。然而,需要考慮一個這樣的場景:有很多種形式需要應用驗證,而且不同領域有不同規則。在運行時很難創建一個通用的驗證功能。

// object validation rulesconst schema = {first: {required: true },last: {required: true }}// universal validation functionconst validate = (schema, values) => {for(field in schema) {if (schema[field].required) {if(!values[field]) {return false; } } }return true;}console.log(validate(schema, {first: ’Bruce’})); // falseconsole.log(validate(schema, {first: ’Bruce’, last: ’Wayne’})); //true

現在我們有一個驗證函數,可以各種形式的重用,而不需要為每個不同的功能定制一個驗證函數。

Double Bitwise NOT

如果你是一位JavaScript新手的話,對于逐位運算符(Bitwise Operator)你應該永遠不會在任何地方使用。此外,如果你不處理二進制0和1,那就更不會想使用。

然而,一個非常實用的用例,那就是雙位操作符。你可以用它替代Math.floor()。Double Bitwise NOT運算符有很大的優勢,它執行相同的操作要快得多。你可以在這里閱讀更多關于位運算符相關的知識。

Math.floor(4.9) === 4; // true//or~~4.9 === 4; //true

以上就是JavaScript編碼小技巧分享的詳細內容,更多關于JavaScript編碼技巧的資料請關注好吧啦網其它相關文章!

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 神马影院-实时更新秒播| 曙光腾达官网-天津脚手架租赁-木板架出租-移动门式脚手架租赁「免费搭设」 | 塑胶地板-商用PVC地板-pvc地板革-安耐宝pvc塑胶地板厂家 | 雪花制冰机(实验室雪花制冰机)百科 | 【星耀裂变】_企微SCRM_任务宝_视频号分销裂变_企业微信裂变增长_私域流量_裂变营销 | 科昊仪器超纯水机系统-可成气相液氮罐-美菱超低温冰箱-西安昊兴生物科技有限公司 | 广州食堂承包_广州团餐配送_广州堂食餐饮服务公司 - 旺记餐饮 | 智能楼宇-楼宇自控系统-楼宇智能化-楼宇自动化-三水智能化 | 主题班会网 - 安全教育主题班会,各类主题班会PPT模板 | 英思科GTD-3000EX(美国英思科气体检测仪MX4MX6)百科-北京嘉华众信科技有限公司 | 对夹式止回阀_对夹式蝶形止回阀_对夹式软密封止回阀_超薄型止回阀_不锈钢底阀-温州上炬阀门科技有限公司 | 股指期货-期货开户-交易手续费佣金加1分-保证金低-期货公司排名靠前-万利信息开户 | 办公室家具公司_办公家具品牌厂家_森拉堡办公家具【官网】 | 顶空进样器-吹扫捕集仪-热脱附仪-二次热解吸仪-北京华盛谱信仪器 | 中红外QCL激光器-其他连续-半导体连续激光器-筱晓光子 | 蜂窝块状沸石分子筛-吸附脱硫分子筛-萍乡市捷龙环保科技有限公司 | 学校用栓剂模,玻璃瓶轧盖钳,小型安瓿熔封机,实验室安瓿熔封机-长沙中亚制药设备有限公司 | 成都中天自动化控制技术有限公司 | 全温恒温摇床-水浴气浴恒温摇床-光照恒温培养摇床-常州金坛精达仪器制造有限公司 | 动库网动库商城-体育用品专卖店:羽毛球,乒乓球拍,网球,户外装备,运动鞋,运动包,运动服饰专卖店-正品运动品网上商城动库商城网 - 动库商城 | 旅游规划_旅游策划_乡村旅游规划_景区规划设计_旅游规划设计公司-北京绿道联合旅游规划设计有限公司 | 西子馋火锅鸡加盟-太原市龙城酉鼎餐饮管理有限公司 | 广州监控安装公司_远程监控_安防弱电工程_无线wifi覆盖_泉威安防科技 | 行业分析:提及郑州火车站附近真有 特殊按摩 ?2025实地踩坑指南 新手如何避坑不踩雷 | 插针变压器-家用电器变压器-工业空调变压器-CD型电抗器-余姚市中驰电器有限公司 | 橡胶接头_橡胶软接头_可曲挠橡胶接头-巩义市创伟机械制造有限公司 | 陕西高职单招-陕西高职分类考试网| 液压油缸-液压缸厂家价格,液压站系统-山东国立液压制造有限公司 液压油缸生产厂家-山东液压站-济南捷兴液压机电设备有限公司 | 捷码低代码平台 - 3D数字孪生_大数据可视化开发平台「免费体验」 | 食品质构分析仪-氧化诱导分析仪-瞬态法导热系数仪|热冰百科 | 充气膜专家-气膜馆-PTFE膜结构-ETFE膜结构-商业街膜结构-奥克金鼎 | led冷热冲击试验箱_LED高低温冲击试验箱_老化试验箱-爱佩百科 | 展厅设计公司,展厅公司,展厅设计,展厅施工,展厅装修,企业展厅,展馆设计公司-深圳广州展厅设计公司 | 铝板冲孔网,不锈钢冲孔网,圆孔冲孔网板,鳄鱼嘴-鱼眼防滑板,盾构走道板-江拓数控冲孔网厂-河北江拓丝网有限公司 | 热处理温控箱,热处理控制箱厂家-吴江市兴达电热设备厂 | 中式装修设计_全屋定制家具_实木仿古门窗花格厂家-喜迎门 | 新疆乌鲁木齐网站建设-乌鲁木齐网站制作设计-新疆远璨网络 | 卡诺亚轻高定官网_卧室系统_整家定制_定制家居_高端定制_全屋定制加盟_定制家具加盟_定制衣柜加盟 | 成都竞价托管_抖音代运营_网站建设_成都SEM外包-成都智网创联网络科技有限公司 | 沧州友城管业有限公司-内外涂塑钢管-大口径螺旋钢管-涂塑螺旋管-保温钢管生产厂家 | 耳模扫描仪-定制耳机设计软件-DLP打印机-asiga打印机-fitshape「飞特西普」 |