那些短小精悍的&奇葩的&令人感到惊讶的JavaScript代码----更新中

自学习前端以来,陆陆续续遇见很多短小令人惊讶的js代码,固有了专门开一片日记来记录这些神奇的代码的想法,目的还是以学习,观赏为主。

1.JavaScript中 (a ==1 && a== 2 && a==3) 可能为 true 吗?

来自Stack Overflow的一个问题:链接

国外面试题,Nothing is impossible.

解决方案1:
自定义 toString(或者 valueOf)方法,每次调用改变一次返回值,从而满足判断条件。

const a = {
  i: 1,
  toString: function () {
    return a.i++;
  }
}

if(a == 1 && a == 2 && a == 3) {
  console.log('Hello World!');
}

tostring()属于Object对象,当使用 == 时,如果两个参数的类型不一样,那么 JS 会尝试将其中一个的类型转换为和另一个相同。在这里左边对象,右边数字的情况下,会首先尝试调用 valueOf(如果可以调用的话)来将对象转换为数字,如果失败,再调用 toString。

第二个方法,有点像障眼法,=-=:

var a? = 1;
var a = 2;
var ?a = 3;
if(a?==1 && a== 2 &&?a==3) {
    console.log("Why hello there!")
}

注意在if语句(我从你的问题中复制)怪异的间距。 这是半角Hangul(即那些不熟悉的韩语),它是一个Unicode空格字符,不被ECMA脚本解释为空格字符 - 这意味着它是一个标识符的有效字符。 因此,有三个完全不同的变量,一个是在一个之后的Hangul,另一个是前一个,最后一个只有一个。 为了便于阅读,用_替换空格,相同的代码如下所示:

var a_ = 1;
var a = 2;
var _a = 3;
if(a_==1 && a== 2 &&_a==3) {
    console.log("Why hello there!")
}

哈哈哈,我一般还通过切换半角全角符号方便在Markdown里做段落的空格处理。

还有一种解决方法就是js的with语句,把对象的作用域的范围明确出来(听说with语句缓慢)

var i = 0;

with({
  get a() {
    return ++i;
  }
}) {
  if (a == 1 && a == 2 && a == 3)
    console.log("wohoo");
}

还有很多办法来解决这个,感兴趣自己可探究。

原文地址:https://www.cnblogs.com/zhangmingzhao/p/8372392.html

时间: 2024-11-05 18:42:23

那些短小精悍的&奇葩的&令人感到惊讶的JavaScript代码----更新中的相关文章

7 个令人惊讶的 JavaScript “特

在过去的几个月里,我对 JSHint 做了一些改进,主要是,学习 ES6(我最自豪的是重新实现了变量作用域)的过程中我碰到了几个特性,它们让我惊讶,其中大部分是关于 ES6 的特性但也有一部分是 ES3 特性,这些特性我以前从未用过,而现在我将开始使用它们. 从任何一个代码块中 break 你应该已经知道你可以从任意循环中 break 和 continue —— 这是一个相当标准的程序设计语言结构.但你可能没有意识到,你可以给循环添加一个 label ,然后跳出任意层循环: outer: for

特斯拉季度净利润使分析师感到惊讶

特斯拉股价在盘后交易中飙升20%,此前该公司公布了季度净利润,分析师感到意外,发布了看涨前景,并表示其Model Y运动型多功能车并将于明年夏天"提前"推出. 据KlipC了解,这家总部位于加利福尼亚州弗里蒙特的集团继上半年累计亏损11亿美元之后,第三季度的净利润为1.43亿美元. 特斯拉公布的调整后每股收益为1.86美元,甚至好于华尔街分析师最乐观的预期,其预测范围从每股亏损1.25美元到每股盈利0.34美元. 然而,第三季度收入为63亿美元,低于预期的65亿美元,也低于去年同期的6

我经历过的那些奇葩用户体验(持续更新中。。。)

1.CSDN 问题现象:登陆账号以后会跳转到一个很奇葩的"我的CSDN"界面,整个界面仿微博设计,但内容却莫名其妙,且整个界面色调单一,使用体验极差. 评论:作为一个计算机行业的门户网站,居然会出现这么业余的设计,我有点不敢相信. 2.陆金所苹果手机端APP 问题现象:登陆->我的账户->持有中->点击任意已经持有项目->点击继续投资,此时并不会进入该项目的投资界面,而会进入所有产品的选择界面,需要在众多的产品中重新找到想要投资的项目,才可以继续投资. 评论:1

奇葩的对象创建方式(更新中)

1.日志对象的创建方式 public static final Logger  log =Logger.getLogger(需要产生日志文件的class对象); 2.httpClient对象的创建方式 CloseableHttpClient httpclient = HttpClients.createDefault(); 3.获取一个Http返回的对象 CloseableHttpResponse response = httpClient.execute(get);

asp.net开发中遇到的奇葩bug及解决办法(会持续更新。。。)

1,不知道你们遇没遇到过,在vs2010或更高版本上运行程序的时候,完全没问题,放在IIS中出现了问题,就比如左侧是菜单项,点击菜单右边显示,如果菜单链接是这样:content.aspx,而另一个链接是这样:manager/manager_list.aspx,在IIS中就会出现Session过期的问题,content.aspx页面根本无法接收到传过来的session值,因此会报session相关的错. 解决办法:把链接路径改成一致就能解决,改成这样:manager/content.aspx.暂时

Jquery之事件绑定(bind(),live(),delegate(),on())

1..bind() 描述: 为一个元素绑定一个事件处理程序. .bind()一个基本的用法: $(selector).bind('click', function() { alert('User clicked on "foo."'); }); 可以直接用原生js替代为: $(selector).click( function() { alert('User clicked on "foo."'); }); 在jQuery1.4.3,您现在可以通过传递false代替

用 C 语言和 nkCEngine 写了一个基于命令的迷你脚本编译器与脚本播放器

首先,博主感到非常高兴,就在很久以前,博主就想写一个属于自己的脚本引擎,哪怕功能再简单也好,只要能跑起来就行了,直到今天,博主终于向这个梦想迈出了第一步,将脚本引擎的雏形给做了出来,因为这个脚本系统属于 nkCEngine 的一部分,所以博主将其命名为 nkScript,nkScript 是一门基于命令的语言,没有复杂的函数调用,没有复杂的循环语句,它拥有的,是简单的数值运算语句.条件跳转语句.无条件跳转语句.命令语句,等等:nkScript 的开发目标主要是用于制作简单的文字冒险游戏,就是那种

不管你学的是什么专业,你都应该多少懂些管理学的东西

不管你学的是什么专业,你都应该多少懂些管理学的东西 [蝴蝶效应][青蛙现象][鳄鱼法则]      [鲇鱼效应]  [羊群效应]    [刺猬法则]    [手表定律][破窗理论][二八定律][木桶理论]      [马太效应]  [鸟笼逻辑]    [责任分散效应][帕金森定律][晕轮效应][霍桑效应][习得性无助实验][证人的记忆][罗森塔尔效应][虚假同感偏差]-----------------------------------------------------------------

理论与实践中的 C# 内存模型,第 2 部分

转载自:https://msdn.microsoft.com/zh-cn/magazine/jj883956.aspx 这是介绍 C# 内存模型的系列文章的第二篇(共两篇). 正如在 MSDN 杂志十二月刊的第一篇文章 (msdn.microsoft.com/magazine/jj863136) 中所介绍的,编译器和硬件可能会悄然改变程序的内存操作,尽管其方式不会影响单线程行为,但可能会影响多线程行为. 例如,请考虑以下方法: void Init() {   _data = 42;   _ini