7 种 JavaScript 技巧使你更聪明

1.总是颠倒逻辑

让我们从一个小优化开始,目的是为了使得非常简单的操作看起来复杂些。

if (x && y) { … } // bad
if (!(!x || !y)) { … } // good

2.在你的变量名字里使用扩展的unicode字符

编译好的软件一旦发布成产品,它必须是一个黑盒。这对JavaScript来说是不可能的。如果有人想彻底搞懂你的JavaScript代码,他们仅仅需要打开浏览器控制台、加一些断点就能看到对象的状态。

对象属性的名称,改用非规则字符串,来阻碍他们的进展。

var foo = function (person) {// stuff happens// perhaps a breakpoint is added here// or they attempt to log the objectconsole.log(person);}var person = {};person[‘\t’] = ‘Nicholas’;person[‘\b’] = ‘Male’;person[‘\r’] = ‘Programmer’;person[‘\f’] = ‘Lover’;

当你试图去查看变量时,会看到如下情景:
screenshot

当你试着在控制台输出log时,会看到:
screenshot

用同样的技巧把Zalgo文本合并到你的代码
screenshot

3.补习你的三角学

在我从大学退学以前,老师常常说数学和编程是多么地紧密相关。根据经验,我发现不是这回事儿。事实上,我开始觉得,老师是为了骗学生来上课。好吧,是时候好好利用学生欠下的严重债务了。

不要用

if (!val) { … }

而要用

Math.floor(.5 + ((Math.cos(val)*.5)))

仅当val是2pi的整数倍时,它才会返回true。你甚至不需担心val不是一个数字。真没有关系。实际上,也不再有关系了。

4.利用JavaScript的仁慈

有多少次你在一个if语句该用等号操作符的时候而意外地使用了赋值操作符?这是非常恼人的,因为它不会报错、仅仅把程序带到不可意料的境地。

function foo (x) {if (x=true) {// no matter what value is // passed in for x, this// will always execute}
}
foo(false);

看你代码的人看到这里,会想当然地认为这是你代码的错误。但是,我们没有错误,因此这个人就会受到惩罚。“修复”它将带来不希望的后果。

5.不用十进制

用八进制初始化一个数字很容易被误认为是十进制;仅仅在第一个数字使用‘0’。

var i = 27 // 27
var j = 027 // 23
你的同事或许责怪你正犯下不可饶恕的错误,但是你要坚持八进制更快,因为所有的位本来就是以8为一组的。

6.空白不是毛病;除了它有用的情况

每个人都知道JavaScript里的空白和分号不过是多余的,是吗?错!不要这样想当然。

(function () { var a=1,b=2,c=3d=4,e=5,f=6;
}());
console.log(d,e,f); // 4,5,6

上面的例子,我们“少”了一个逗号。如果代码都在一行,我们不会犯错。但是既然不在一行,编译器将在 c=3 之后附加一个分号。这导致d,e,f声明为全局变量。现在可以随时使用这些变量了,包括分离的文件。

再一次,如果有人注意到这种情况,并试着修改,这将潜在地破坏了所有不相关的代码部分,而不是规范代码,他们很可能只有回退修改了,足以证明你更聪明。

7.富有创新

编程就是创新,创新就是模仿别人。不要害怕偷代码和想法,或者责备其他人偷你的。比如,你知道jQuery是完全模仿Prototype的吗?是的。

Nicholas Ortenzio【注1】在练习倒背字母表,以防万一。

原文地址:https://medium.com/cool-code-pal/a1286881aed7
注1:Nicholas Ortenzio 就是本文的作者,最后一句话的意思应该是:很少有人倒背字母表,如果你倒背了,你会显得比其他人聪明。

转载自腊八粥

文章转载自 开源中国社区 [http://www.oschina.net]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/290125.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设置访问权限_【新思考教学者思】李世松:不要对经典设置访问权限

不要对经典设置访问权限——《背影》备课札记文/李世松紫阳县举办课堂教学改革推进会,师训教研中心王主任电话通知我讲一节示范课。我知道,这既是对我的一种肯定,更是一次磨炼,因为我的师父邱俊老师会到现场点评课堂。自领受任务之…

C++语言打印汉字表

#include<iostream> using namespace std; main() {int i,j;for(i=0xA1;i<=0xFE;i++){for(j=0xA1;j<=0xF7;j++)printf("%c%c",i,j); // 或者用cout输出函数:cout<<char(i)<<char(j);printf("\n");} } 说明: 16进制和10进制转换…

《算法竞赛入门经典》第三章 3.4

程序 3-5 程序 3-6 转载于:https://www.cnblogs.com/LzKlyhPorter/p/4192250.html

C#使用Objects Comparer进行对象比较

介绍Objects Comparer是用于对象比较的工具&#xff0c;c#常见的数据结构都是可以用这个三方库进行对比&#xff0c;比较复杂的对象也是可以比较的。简而言之&#xff0c;Objects Comparer 是一个对象到对象的比较器&#xff0c;它允许逐个成员递归得比较对象&#xff0c;并为某…

jQuery07源码 (3803 , 4299) attr() prop() val() addClass()等 : 对元素属性的操作

var nodeHook, boolHook,rclass /[\t\r\n\f]/g,rreturn /\r/g,rfocusable /^(?:input|select|textarea|button)$/i;jQuery.fn.extend({attr: function( name, value ) { //遍历this //arguments.length > 1,jQuery.attr(this[i],name,value),返回this //arguments.lengt…

Eclipse提示The **** cannot be resolved. It is indirectly referenced from required .cl

1、问题 代码正常&#xff0c;提示这个错误The **** cannot be resolved. It is indirectly referenced from required .cl 2、解决办法 把提示错误地方的类改成在这个****包名下面就行

ora22813操作数值超出系统的限制_最新:华为“鸿蒙”操作系统终于面世!一旦遭到限制,将随时启用...

受美国的要求&#xff0c;自5月开始&#xff0c;安卓暂停了与华为的部分合作&#xff0c;而这直接影响到了华为对安卓系统的正常更新。迫于无奈之下&#xff0c;华为对外表示&#xff0c;已经准备了备用系统&#xff0c;但只在必要的情况下使用&#xff0c;而这一系统就是广为人…

解决点击MDI父窗体下拉菜单,子窗体重复出现的问题

private void 培训信息TToolStripMenuItem_Click(object sender, EventArgs e) { foreach (Form form in Application.OpenForms) { if (form.Name "Zhuce_Train")//子窗体的Name属性 { …

cidaemon.exe进程cpu占用率高及关闭cidaemon.exe进程方法

问题描写叙述: 这段时间机器总是出现一个奇怪的问题:cidaemon.exe进程占用CUP率98%以上,大大影响了电脑的正常使用.资源管理器中出现多个cidaemon.exe进程,强制结束占用cpu率最高的一个,两分钟左右后,相同的问题还是出现了。 问题关联: cidaemon.exe相关知识&#xff1a;cidaem…

Blazor University (2)布局 — 创建 Blazor 布局

原文链接&#xff1a;https://blazor-university.com/layouts/布局Blazor 布局类似于 ASP Webforms 母版页的概念&#xff0c;与 ASP MVC 中的 Razor 布局相同。几乎网络上的每个网站都有一个模板用于整个网站&#xff08;页面顶部的品牌&#xff0c;底部的版权&#xff09;或网…

iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序

iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序 一、plist文件和项目结构图 说明&#xff1a;这是一个嵌套模型的示例 二、代码示例&#xff1a; YYcarsgroup.h文件代码&#xff1a; 1 //2 // YYcarsgroup.h3 // 07-汽车展示&#xff08;高级&#xff09;4 //5 //…

递归和非递归实现规律函数

1、问题 A(n) n / (2 * n 1)B1 2 A1;B2 2 A1 * (2 A2);B3 2 A1 * (2 A2 * (2 A3));....以此类推&#xff0c;求B(n)2、代码实现 #include <stdio.h>/** A(n) n / (2 * n 1) B1 2 A1; B2 2 A1 * (2 A2); B3 2 A1 * (2 A2 * (2 A3)); ....以此类推&…

程序员永远的痛之字符编码的奥秘

字符编码相信是每个程序员的噩梦&#xff0c;只要是有中文的地方&#xff0c;总是会遇到各种编码的问题&#xff0c;并且这种问题还非常难缠&#xff0c;尤其在linux上&#xff0c;因为上面很多软件都是针对 英语国家开发的&#xff0c;是不会考虑其他语种编码问题。在遇到编码…

awb数据怎么计算_白平衡自己主动(AWB)算法---2,颜色计算

本文说明了白平衡算法估计当前场景的色温过程.色温计算的原理并不复杂,但要做到,还是一道&#xff0c;认真做好每一步,这需要大量的测试,和算法一直完好.关于该过程首先简要:1, 取的图像数据,并划分MxN块,如果是25x25,并统计每一块的基本信息(,白色像素的数量及R/G/B通道的分量…

svn强制要求提交注释

2019独角兽企业重金招聘Python工程师标准>>> 看了N多资料&#xff0c;不知道为什么我总是不成功。现在终于测试成功了&#xff0c;下面是实际操作过程~~ 使用bitnami一键安装了subversion&#xff0c;在使用中&#xff0c;希望开发人员提交时必须输入日志内容&#…

Xamarin效果第五篇之ScrollView动态滚动效果

前面基于Xamarin做了一点效果;这不过年从老家回来一直成沉迷工作无法自拔,没时间来更新文章了;今天赶紧抽点时间再来更新一下效果;直接看看最终实现的效果:前台RadioButton的事件绑定选中状态绑定:后台对ScrollView的滚动处理:ScrollView的滚动对当前选中状态的修改&#xff1a…

How to change the text color in the terminal

You can open the file ~/.bashrc and then choose the force_color_promptyes otherwise, you can change the color in PSI. 注意&#xff1a;使用方法&#xff1a;# PS1自定义内容注意两边的单引号示例&#xff1a; PS1(\u\H \d \t)\$-------------------------------------…

9 个使用前必须再三小心的 Linux 命令

Linux shell/terminal 命令非常强大即使一个简单的命令就可能导致文件夹、文件或者路径文件夹等被删除。 在一些情况下Linux 甚至不会询问你而直接执行命令导致你丢失各种数据信息。 一般来说在 Web 上推荐新的 Linux 用户执行这些命令当然也有人哪些写过这代码的人不这么想因为…

C/C++之内存对齐

1、什么是内存对齐 计算机系统对基本类型数据在内存中放的位置做了限制,它们会要求这些数的首地址是一个数(一般为4和8)的整数倍,我们看下结构体的大小 #include <stdio.h> struct A {char a;int b; };int main() {printf("size of struct A is %d\n", sizeo…

生存下去

这个世界就是这么的无情&#xff0c;你改不了现势&#xff0c;现势就会改变你&#xff0c;毫无疑问。加油吧&#xff0c;只为一个目的&#xff1a;生存下去。