js中一些怪异的写法_神奇的JavaScript

时间: 2018-04-26阅读: 3579标签: js技巧

JavaScript是一门伟大的语言,作为一门弱类型语言,它拥有非常简洁的语法,庞大的生态系统,灵活性非常强大。由于不同程序员编码的习惯不同,导致出js各种神奇的写法,所谓的神奇也就是罕见。下面就开始介绍这些怪异的写法吧。


1、this.value可以直接获取值?

<input type="range" name="range" id="r"/><br/>  
<script>
r.onchange = function(){
  console.log(this.value);  
}  
</script>

请看上面的代码,没有使用document.getElementById(‘r’),这是由于在html页面中id必须是唯一的,当id名称和内置的属性、全局变量不重名的情况下,该id将以名称的形式自动成为window对象的属性,也就是说:

console.log(r===document.getElementById('r')); //返回的为true
r.onchange = function(){
  console.log(this===r);  //返回的为true
}


2、函数前面加感叹号

!function fn(){
    console.log("fly63.com") //直接就输出fly63.com
}();

!在这里代表这个函数为立即执行,除了上面的感叹号,还有加+,-,~,void 这些【注意void后面需要空格哦!】,都是表示立即执行的意思,不过返回值不是正常函数返回的undefined,而是其他。这种不需要调用就直接执行了,它类似于:

(function fn(){
	console.log("fly63.com")
})();


3、代码前加分号

;function fn(){
   console.log("fly63.com")
};

在代码前加分号主要是为了和前面的代码分隔开,默认js是以换行分割代码的,但是为了防止代码上线前合并压缩,导致换行符的删掉,所以这样写更保险,避免上线后造成未知的错误。


4、return换行不报错

function fn(){
	return
	1
}
console.log(fn());//出现undefined

上面的代码并没报错,而且返回的也不是1,这是为什么呢?这是由于js会自动在代码换行结尾的地方添加分号,也就是说上面代码等同于:

function fn(){
	return;
	1;
}
console.log(fn());//出现undefined是由于return并没有返回任何内容


5、~~,|,!!的使用

var a=13.14;
console.log(~~a);//13
console.log(a|0);//13
console.log(a|1);//13
console.log(a|3);//15
console.log(!!a);//true

说明:

~~去除小数部分,当a为字符串的时候:为'13.14'也是返回13,为'fly63'返回的就是0了。


|这个就很诡异了。经测算a|0实现的效果和~~一样,但是如果后面的值不为0的情况下,如下返回的结果好像都没有规律:

console.log(1|4); //5
console.log(4|4);//4
console.log(3|8);//11
console.log(5.3|3.1);//4

这是为什么呢?简单来讲:这里“|”就是转换为2进制之后相加得到的结果,例如我们拿简单的举例:  

3|8  //转换为二进制之后011 | 1000  相加得到1011=11


!!这个符号一般是将后面表达式转换为布尔型的数据 ,所以结果返回就是false或者true。


6、其它

除了上面整理的,还有很多哦,这里就不举例了,有兴趣的朋友可以安装这个~~~~

$ npm install -g wtfjs


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

链接: http://www.fly63.com/article/detial/722

不用if撸代码,是件很有趣的事。

试着不用if撸代码,是件很有趣的事,而且,万一你领会了什么是“数据即代码,代码即数据”呢?

JavaScript:处理值为undefined的7个技巧

学习JavaScript时,当时我对于undefined 和 null 比较困惑 ,因为他们都表示空值。他们有什么明确的区别吗?他们似乎都可以定义一个空值,而且 当你进行 在做null ===undefined 的比较时,结果是true。

(a ==1 && a== 2 && a==3) 有可能是 true 吗?

1. 利用松散相等运算符 == 的原理,自定义 toString 和 valueOf 返回对应值2. 利用半宽度韩文等特殊字符,玩“障眼法”,本质上其实并没有做到题设3. 劫持 JS 对象的 getter,不过这种方式对于严格相等 === 同样有效

三个实用的javascript小技巧

如果你想从后向前获取一个数组的元素,可以这样写:如果你想在某个条件逻辑值为true时,执行某个函数,就像这样:如果你必须给一个变量赋默认值,可以简单的这样写:

5个小技巧让你写出更好的 JavaScript 条件语句

使用 Array.includes 来处理多重条件,少写嵌套,尽早返回,使用函数默认参数和解构,相较于 switch,Map / Object 也许是更好的选择,使用 Array.every 和 Array.some 来处理全部/部分满足条件,让我们一起写出可读性更高的代码吧

JS技巧技法总结

闭包原理、数组展平、前端语音(在项目中需要对ajax请求返回的消息进行语音播报,str 为返回的data)、Proxy 数据绑定和监听、计数器

js求数组的最大值--奇技淫巧和笨方法

js中有很多“奇技淫巧”,有时我会常常刻意去用这些“奇技淫巧”(注意,我不是在反对用它,只是有时其实没必要用)。比如,求数组中的最大值,js中Array没有原生的求最大值的方法,但是Math有呀

js语言中常见错误总汇

事实证明很多这些 null 或 undefined 的错误是普遍存在的。 一个类似于 Typescript 这样的好的静态类型检查系统,当设置为严格的编译选项时,能够帮助开发者避免这些错误。

12个非常实用的JavaScript小技巧

在这篇文章中将给大家分享12个有关于JavaScript的小技巧。这些小技巧可能在你的实际工作中或许能帮助你解决一些问题。

JavaScript 异步调用——从小小题目逐步走进 JavaScript 异步调用

async/await 语法让异步调用写起来像写同步代码,在编写代码的时候,可以避免逻辑跳跃,写起来会更轻松。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!