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

您的位置:首頁技術(shù)文章
文章詳情頁

谷歌的JavaScript編寫風(fēng)格中 13點(diǎn)值得我們注意的!

瀏覽:104日期:2023-11-10 09:11:54

對于那些還不熟悉JavaScript的編寫風(fēng)格的人,谷歌提供了編寫JavaScript的編寫風(fēng)格指南,谷歌風(fēng)格指南 其中列出了編寫干凈、可理解代碼的最佳風(fēng)格實(shí)踐。

谷歌的JavaScript編寫風(fēng)格中 13點(diǎn)值得我們注意的!

對于編寫有效的JavaScript來說,這些并不是硬性的、快速的規(guī)則,而只是在源文件中維護(hù)一致的、吸引人的樣式選擇的規(guī)則。這對于JavaScript來說尤其有趣,它是一種靈活且多變的語言,允許多種風(fēng)格的選擇。

谷歌和Airbnb有兩個(gè)最受歡迎的編寫風(fēng)格指南。如果我的工作是花費(fèi)大量時(shí)間編寫JS,那么可以先學(xué)習(xí)這兩種方法。

以下是谷歌JS風(fēng)格指南中我認(rèn)為最有趣和相關(guān)的13條規(guī)則:

谷歌JS風(fēng)格指南處理各種各樣的問題,從激烈爭論的問題(制表符與空格的比較,以及分號應(yīng)該如何使用這個(gè)有爭議的問題),到一些更模糊的規(guī)范,這些規(guī)范令我吃驚,它們肯定會改變我以后寫JS的方式。

對于每個(gè)規(guī)則,我將對規(guī)范進(jìn)行總結(jié),然后引用樣式指南中的支持部分,詳細(xì)描述該規(guī)則。在適用的情況下,我還將提供實(shí)踐中的樣式示例,并將其與不遵循規(guī)則的代碼進(jìn)行對比。

使用空格,而不是制表符除了行結(jié)束符序列之外,ASCII水平空格字符(0x20)是源文件中出現(xiàn)在任何位置的惟一空格字符。這意味著…制表符不用于縮進(jìn)

使用兩個(gè)空格(而不是四個(gè))進(jìn)行縮進(jìn)

// badfunction foo() {????let name;}// badfunction bar() {?let name;}// goodfunction baz() {??let name;}

分號是必需的

每個(gè)語句必須以分號結(jié)束,禁止依靠自動分號插入。

雖然無法想象為什么會有人反對這個(gè)想法,但JS中分號的一致使用正在成為新的“空格對制表符”的爭論。谷歌一慣建議結(jié)束需要使用分號。

// badlet luke = {}let leia = {}[luke, leia].forEach(jedi => jedi.father = 'vader')// goodlet luke = {};let leia = {};[luke, leia].forEach((jedi) => { jedi.father = 'vader';});

不要使用ES6模塊

不要使用ES6模塊(即導(dǎo)出和導(dǎo)入關(guān)鍵字),因?yàn)樗鼈兊恼Z義還沒有最終確定。注意,一旦語義完全標(biāo)準(zhǔn),將重新定義使用的方式。

// 先別做這種事//------ lib.js ------export function square(x) { return x * x;}export function diag(x, y) { return sqrt(square(x) + square(y));}//------ main.js ------import { square, diag } from 'lib';

不鼓勵(lì)(但不禁止)水平對齊

這種做法是允許的,但谷歌編寫風(fēng)格通常不鼓勵(lì)這樣做,甚至不需要在已經(jīng)使用它的地方保持水平對齊。

水平對齊是在代碼中添加可變數(shù)量的額外空格,以使某行變量的值與前面變量值對齊。

// bad{ tiny: 42, longer: 435, };// good{ tiny: 42, longer: 435,};

不要再使用var了

使用const或let聲明所有本地變量來代替 var。默認(rèn)情況下使用 const,除非需要重新分配變量在使用 let 聲明。

// badvar example = 42;// goodlet example = 42;

箭頭函數(shù)是首選

箭頭函數(shù)提供了簡潔的語法,并解決了this 在函數(shù)中不確定性的一些問題,與function關(guān)鍵字相比,更喜歡箭頭函數(shù),特別是對于嵌套函數(shù)。

老實(shí)說,我只是覺得箭頭函數(shù)很棒因?yàn)樗鼈兏啙崳烙^。事實(shí)證明,它們還有一個(gè)非常重要的用途。

// bad[1, 2, 3].map(function (x) { const y = x + 1; return x * y;});// good[1, 2, 3].map((x) => { const y = x + 1; return x * y;});

使用模板字符串而不是拼接客串

在復(fù)雜的字符串連接上使用模板字符串(用`分隔),特別是在涉及多個(gè)字符串文本時(shí),模板字符串可以跨越多行。

// badfunction sayHi(name) { return 'How are you, ' + name + '?';}// badfunction sayHi(name) { return ['How are you, ', name, '?'].join();}// badfunction sayHi(name) { return `How are you, ${ name }?`;}// goodfunction sayHi(name) { return `How are you, ${name}?`;}

不要對長字符串使用 來表示連續(xù)

不要在普通或模板字符串文字中使用連續(xù)行(也就是說,在字符串文字中以反斜杠結(jié)束一行)。盡管ES5允許這樣做,但是如果斜杠后面有任何尾隨空格,那么可能會導(dǎo)致一些棘手的錯(cuò)誤,而且對讀者來說不太明顯。

有趣的是,谷歌和Airbnb不同意這個(gè)規(guī)則(這是Airbnb的規(guī)范)。

雖然谷歌建議連接更長的字符串(如下所示),Airbnb的風(fēng)格指南基本上建議什么也不做,并允許長字符串繼續(xù),只要他們需要。

// bad (sorry, this doesn't show up well on mobile)const longString = 'This is a very long string that far exceeds the 80 column limit. It unfortunately contains long stretches of spaces due to how the continued lines are indented.'; // goodconst longString = 'This is a very long string that ' + 'far exceeds the 80 column limit. It does not contain ' + 'long stretches of spaces since the concatenated ' + 'strings are cleaner.';

for…of是for循環(huán)的首選類型

使用ES6,該語言現(xiàn)在有三種不同的for循環(huán)。所有的循環(huán)都可以使用,但是如果可能的話,for-of循環(huán)應(yīng)該是首選的。

如果您問我,這是一個(gè)奇怪的問題,但是我認(rèn)為我應(yīng)該包含它,因?yàn)楣雀杪暶髁艘环N首選的for循環(huán)類型,這非常有趣。

我總覺得 for...in 循環(huán)對于對象更好,而對于for...of 的更適合數(shù)組,不同場景可以使用不同方式。

雖然這里的Google規(guī)范不一定與這個(gè)想法相矛盾,但是了解他們特別喜歡這個(gè)循環(huán)還是很有趣的。

不要使用eval()

不要使用eval或function(…string)構(gòu)造函數(shù)(代碼加載器除外)。這些特性具有潛在的危險(xiǎn),而且在CSP環(huán)境中根本不起作用

MDN 頁面的eval()中,甚至有一個(gè)名為“不要使用eval!”

// badlet obj = { a: 20, b: 30 };let propName = getPropName(); // returns "a" or "b"eval( 'var result = obj.' + propName );// goodlet obj = { a: 20, b: 30 };let propName = getPropName(); // returns "a" or "b"let result = obj[ propName ]; // obj[ "a" ] is the same as obj.a

常量應(yīng)該用全大寫字母命名,用下劃線分隔

常量名稱使用CONSTANT_CASE的格式:所有大寫字母,單詞由下劃線分隔。

如果您絕對確信某個(gè)變量不應(yīng)該更改,那么可以通過將該常量的名稱大寫來表示。這使得在整個(gè)代碼中使用該常量時(shí),它的不變性非常明顯。

一個(gè)值得注意的例外是,如果常量是函數(shù)作用域的。在這種情況下,應(yīng)該用camelCase來寫。

// badconst number = 5;// goodconst NUMBER = 5;

每次聲明一個(gè)變量

每個(gè)局部變量聲明只聲明一個(gè)變量:聲明如令a = 1, b = 2,不推薦。

// badlet a = 1, b = 2, c = 3;// goodlet a = 1;let b = 2;let c = 3;

使用單引號,而不是雙引號

普通的字符串用單引號(')分隔,而不是雙引號(")。提示:如果字符串包含單引號字符,可以考慮使用模板字符串來避免轉(zhuǎn)義引號。

// badlet directive = "No identification of self or mission."http:// badlet saying = 'Say it ainu0027t so.';// goodlet directive = 'No identification of self or mission.';// goodlet saying = `Say it ain't so`;

最后一個(gè)注意

正如我在開始時(shí)所說,這些不是強(qiáng)制要求。谷歌只是眾多科技巨頭之一,這些只是推薦。

也就是說,看看谷歌這樣的公司提出的風(fēng)格建議是很有趣的,這家公司雇傭了很多才華橫溢的人,他們花了很多時(shí)間編寫優(yōu)秀的代碼。

如果你想要遵循“符合谷歌的源代碼”的指導(dǎo)原則,那么你可以遵循這些規(guī)則—但是,當(dāng)然,許多人不同意這些規(guī)則,你可以隨意忽略這些規(guī)則中的任何一個(gè)或所有規(guī)則。

我個(gè)人認(rèn)為在很多情況下Airbnb的規(guī)范比谷歌更有吸引力。無論您對這些特定的規(guī)則采取何種立場,在編寫任何類型的代碼時(shí),始終牢記風(fēng)格一致性仍然很重要。

原文:13 Noteworthy Points from Google’s JavaScript Style Guide

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 永嘉县奥阳陶瓷阀门有限公司| 杭州营业执照代办-公司变更价格-许可证办理流程_杭州福道财务管理咨询有限公司 | 六维力传感器_六分量力传感器_模腔压力传感器-南京数智微传感科技有限公司 | SDI车窗夹力测试仪-KEMKRAFT方向盘测试仪-上海爱泽工业设备有限公司 | 槽钢冲孔机,槽钢三面冲,带钢冲孔机-山东兴田阳光智能装备股份有限公司 | 臭氧灭菌箱-油桶加热箱-原料桶加热融化烘箱-南京腾阳干燥设备厂 臭氧发生器_臭氧消毒机 - 【同林品牌 实力厂家】 | 数码管_LED贴片灯_LED数码管厂家-无锡市冠卓电子科技有限公司 | 企业微信营销_企业微信服务商_私域流量运营_艾客SCRM官网 | 无线联网门锁|校园联网门锁|学校智能门锁|公租房智能门锁|保障房管理系统-KEENZY中科易安 | 防弹玻璃厂家_防爆炸玻璃_电磁屏蔽玻璃-四川大硅特玻科技有限公司 | 宿松新闻网 宿松网|宿松在线|宿松门户|安徽宿松(直管县)|宿松新闻综合网站|宿松官方新闻发布 | 广东燎了网络科技有限公司官网-网站建设-珠海网络推广-高端营销型外贸网站建设-珠海专业h5建站公司「了了网」 | 青州开防盗门锁-配汽车芯片钥匙-保险箱钥匙-吉祥修锁店 | NBA直播_NBA直播免费观看直播在线_NBA直播免费高清无插件在线观看-24直播网 | 扬尘监测_扬尘监测系统_带证扬尘监测设备 - 郑州港迪科技有限公司 | 安徽泰科检测科技有限公司【官方网站】 | 环讯传媒,永康网络公司,永康网站建设,永康小程序开发制作,永康网站制作,武义网页设计,金华地区网站SEO优化推广 - 永康市环讯电子商务有限公司 | 学考网学历中心| 空气能采暖,热泵烘干机,空气源热水机组|设备|厂家,东莞高温热泵_正旭新能源 | 剪刃_纵剪机刀片_分条机刀片-南京雷德机械有限公司 | 金属清洗剂,防锈油,切削液,磨削液-青岛朗力防锈材料有限公司 | 智慧物联网行业一站式解决方案提供商-北京东成基业 | 电线电缆厂家|沈阳电缆厂|电线厂|沈阳英联塑力线缆有限公司 | 模具钢_高速钢_不锈钢-万利钢金属材料 | 温控器生产厂家-提供温度开关/热保护器定制与批发-惠州市华恺威电子科技有限公司 | 上海冠顶工业设备有限公司-隧道炉,烘箱,UV固化机,涂装设备,高温炉,工业机器人生产厂家 | 环保袋,无纺布袋,无纺布打孔袋,保温袋,环保袋定制,环保袋厂家,环雅包装-十七年环保袋定制厂家 | 工业废水处理|污水处理厂|废水治理设备工程技术公司-苏州瑞美迪 今日娱乐圈——影视剧集_八卦娱乐_明星八卦_最新娱乐八卦新闻 | 博莱特空压机|博莱特-阿特拉斯独资空压机品牌核心代理商 | 硫化罐-电加热蒸汽硫化罐生产厂家-山东鑫泰鑫智能装备有限公司 | 转子泵_凸轮泵_凸轮转子泵厂家-青岛罗德通用机械设备有限公司 | 车载加油机品牌_ 柴油加油机厂家 | 冷却塔改造厂家_不锈钢冷却塔_玻璃钢冷却塔改造维修-广东特菱节能空调设备有限公司 | 双相钢_双相不锈钢_双相钢圆钢棒_双相不锈钢报价「海新双相钢」 双能x射线骨密度检测仪_dxa骨密度仪_双能x线骨密度仪_品牌厂家【品源医疗】 | 全国国际化学校_国际高中招生_一站式升学择校服务-国际学校网 | 纸箱抗压机,拉力机,脂肪测定仪,定氮仪-山东德瑞克仪器有限公司 | 衬塑设备,衬四氟设备,衬氟设备-淄博鲲鹏防腐设备有限公司 | 广州市哲铭油墨涂料有限公司,水性漆生产研发基地 | 二手Sciex液质联用仪-岛津气质联用仪-二手安捷伦气质联用仪-上海隐智科学仪器有限公司 | 分子蒸馏设备(短程分子蒸馏装置)_上海达丰仪器 | 合肥网络推广_合肥SEO网站优化-安徽沃龙First |