JavaScript是一门伟大的语言,作为一门弱类型语言,它拥有非常简洁的语法,庞大的生态系统,灵活性非常强大。由于不同程序员编码的习惯不同,导致出js各种神奇的写法,所谓的神奇也就是罕见。下面就开始介绍这些怪异的写法吧。
<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
}
!function fn(){
console.log("fly63.com") //直接就输出fly63.com
}();
!在这里代表这个函数为立即执行,除了上面的感叹号,还有加+,-,~,void 这些【注意void后面需要空格哦!】,都是表示立即执行的意思,不过返回值不是正常函数返回的undefined,而是其他。这种不需要调用就直接执行了,它类似于:
(function fn(){
console.log("fly63.com")
})();
;function fn(){
console.log("fly63.com")
};
在代码前加分号主要是为了和前面的代码分隔开,默认js是以换行分割代码的,但是为了防止代码上线前合并压缩,导致换行符的删掉,所以这样写更保险,避免上线后造成未知的错误。
function fn(){
return
1
}
console.log(fn());//出现undefined
上面的代码并没报错,而且返回的也不是1,这是为什么呢?这是由于js会自动在代码换行结尾的地方添加分号,也就是说上面代码等同于:
function fn(){
return;
1;
}
console.log(fn());//出现undefined是由于return并没有返回任何内容
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。
除了上面整理的,还有很多哦,这里就不举例了,有兴趣的朋友可以安装这个~~~~
$ npm install -g wtfjs
在写网页的程序的时候,经常碰到要在网页加载完全之后再去展现页面,加载中的时候通过显示loading...的样式。这时候我们会直接想到使用window.onload的方式,或者是img对象的complete属性
async/await 语法让异步调用写起来像写同步代码,在编写代码的时候,可以避免逻辑跳跃,写起来会更轻松。
使用UglifyJS合并/压缩JavaScript ,UglifyJS3与UglifyJS2相比API变动较大,简化较多,文档也增加了不少示例。
试着不用if撸代码,是件很有趣的事,而且,万一你领会了什么是“数据即代码,代码即数据”呢?
本文重在列出并解释说明 JS 中各种容易出错的坑和细节,供大家更加深入理解为什么 JS 会这样
一行能装逼的JavaScript代码,其实靠的是js的类型转化的一些基本原理,本篇就来揭密”sb”是如何炼成的。相信你如果能把这个理清楚了,以后遇到类型转化之类的题目,就可以瞬间秒杀了。
学习JavaScript时,当时我对于undefined 和 null 比较困惑 ,因为他们都表示空值。他们有什么明确的区别吗?他们似乎都可以定义一个空值,而且 当你进行 在做null ===undefined 的比较时,结果是true。
在前端开发中,遇到如下需求:隐藏手机号码,将中间几位替换为*。通过js如何实现手机号码隐藏中间4位呢?下面整理几种实现方式:使用正则、通过长度截取。
在一些网页中我们可以常见的“设置为首页”和“ 收藏本站”,以及“保存到桌面”等功能,使用js是如何实现的呢?这里为大家分享下实现方法,完美兼容IE,chrome,ff等浏览器
RGB和HSL是两种色彩空间,即:红,绿,蓝和色调,饱和度,亮度,前者适用于机器采样,目前的显示器颜色即由这三种基色构成,而后者更符合人类的直观感觉。这篇文章主要介绍原生js实现HSL与RGB相互转换
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!