JavaScript中的"奇奇怪怪"
filter等方法的隐式转化
var list = [1,,2,,0,5,9];
console.log(list[1]); // console: undefined
console.log(list[1] !== null); // console.log: true
list = list.filter(item => item !== null);
// console: [1, 2, 0, 5, 9]
通过prototype骗过引擎
var proto = {};
var obj = Object.create(proto);
function fn() {};
fn.prototype = proto;
console.log(obj instanceof fn);
// console: true
浮点数计算问题
0.1 + 0.2 === 0.3 // false
0.1 + 0.05 === 0.15; // false
0.1 + 0.1 === 0.2; // true
0.1 + 0.3 === 0.4; // true
0.2 + 0.2 === 0.4; // true
0.05 + 0.25 === 0.3; // true
0.15 + 0.15 === 0.3; // true
任何操作数与NaN进行关系比较, 结果都为false
"a" < 3; // false
"a" >= 3; // false
操作未声明变量
var message; // 变量声明之后取得了默认值
// var age;
console.log(message); // console: undefined
console.log(age);
// Uncaught ReferenceError: age is not defined
// 不报错
console.log(typeof message); // console: undefined
console.log(typeof age); // console: undefined
console.log(window.message); // console: undefined
console.log(window.age); // console: undefined
console.log打印
var arr = [1, 2];
console.log(arr); // console 显示[1, 2], 展开后实际没有内容, 长度为0(由于下面for循环的操作)
for(var i=0, len = arr.length; i < len; i++) {
arr.shift();
}
自执行函数
+function() {}()
!function() {}()
-function() {}()
(+function(){}())
new function(){} // 这种写法可以省去最后的一对括号
// 特殊
!function() {return false}()
判断-0
num === -0 // 无法判断是否是-0;因为 0 === -0 也成立
// ES2015 Object.is(value1, value2) 比较两个值是否相同
Object.is(-0, 0); // false
Object.is(NaN, NaN); // true
JavaScript中的"奇奇怪怪"的更多相关文章
- 深刻领悟javascript中的exec与match方法之异同
阅读本文之前,请先看下面一道题: 题目17:Read the following javascript code: var someText="web2.0 .net2.0"; ...
- JavaScript 中的数据类型
Javascript中的数据类型有以下几种情况: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Function,Date,Ar ...
- JavaScript中的this陷阱的最全收集
JavaScript来自一门健全的语言,所以你可能觉得JavaScript中的this和其他面向对象的语言如java的this一样,是指存储在实例属性中的值.事实并非如此,在JavaScript中,最 ...
- JavaScript中的this陷阱的最全收集 没有之一
当有人问起你JavaScript有什么特点的时候,你可能立马就想到了单线程.事件驱动.面向对象等一堆词语,但是如果真的让你解释一下这些概 念,可能真解释不清楚.有句话这么说:如果你不能向一个6岁小孩解 ...
- JavaScript中的apply和call函数详解(转)
每个JavaScript函数都会有很多附属的(attached)方法,包括toString().call()以及apply().听起来,你是否会感到奇怪,一个函数可能会有属于它自己的方法,但是记住,J ...
- 深入理解Javascript中this, prototype, constructor
在Javascript面向对象编程中经常需要使用到this,prototype和constructor这3个关键字. 1.首先介绍一下this的使用:this表示当前对象;如果在全局中使用this,则 ...
- javascript中的链表结构—从链表中删除元素
1.概念 上一个博文我们讲到链表,其中有一个方法remove()是暂时注释的,这个方法有点复杂,需要添加一个Previous()方法找到要删除的元素的前一个节点,这一个博文我们来分析一下这个remov ...
- 深入理解JavaScript中创建对象模式的演变(原型)
深入理解JavaScript中创建对象模式的演变(原型) 创建对象的模式多种多样,但是各种模式又有怎样的利弊呢?有没有一种最为完美的模式呢?下面我将就以下几个方面来分析创建对象的几种模式: Objec ...
- JavaScript中Eval()函数的作用
这一周感觉没什么写的,不过在研究dwz源码的时候有一个eval()的方法不是很了解,分享出来一起学习 -->首先来个最简单的理解 eval可以将字符串生成语句执行,和SQL的exec()类似. ...
随机推荐
- SQL Server 2014:在修改表的内容时,提示“此单元格已更改,尚未将更改提交到数据库”,怎么处理?
那一行上的属性为“不允许为null”的所有字段都填上对应信息,按回车键或者点击下一行任意一个单元格便会自动将更改的信息提交到数据库.
- 分组取topN
假设有这样一个文件,文件内容如下 class1 class2 class1 class1 class2 class2 class1 class2 class1 class2 要求按照班级分组取出每个班 ...
- 【前端新手也能做大项目】:跟我一起,从零打造一个属于自己的在线Visio项目实战【ReactJS + UmiJS + DvaJS】(二)
本系列教程是教大家如何根据开源js绘图库,打造一个属于自己的在线绘图软件.当然,也可以看着是这个绘图库的开发教程.如果你觉得好,欢迎点个赞,让我们更有动力去做好! 本系列教程重点介绍如何开发自己的绘图 ...
- VLAN实验(1)Access接口
1.选择两台S3700的交换机,5台PC机,并按照下图链接好并填写IP,完成此拓扑图 2.由于现在我们还没有划分VLAN,这5台PC,还在同一个VLAN中,现在我们启动所有的设备,这是所有的主机应该是 ...
- 前端页面传来数组,后台用对象集合list接收数据的写法
//保存页面显示应用$("#save").click(function(){ var data = [{"applicationtypeid":"65 ...
- 前端的构建化工具Webpack
经常看到如jquery-3.0.0.js和jquery-3.0.0-min.js等两相似的文件名. 其实以上两个文件名的内容是一样的,不过带min代表的是占用最小的空间,为项目提高性能.压缩的部分如换 ...
- 使用aop加解密http接口
背景 最近在写一个小程序接口,由于安全性比较高,因此需要给请求参数和响应进行加密处理.如果在每个方法上都加密解密,那样代码就显得太繁琐了而且工作量会加大.所以,我们会统一进行加解密处理,一种比较传统的 ...
- Chapter 07-Basic statistics(Part4 t-tests&&nonparametric tests of group difference)
一. t-tests 这一部分我们使用分布在MASS包中的UScrime数据集.它是关于美国47个州在1960年时,关于惩罚制度对犯罪率的影响. Prob:监禁(坐牢)的概率: U1:14到24岁的城 ...
- 为NLog自定义LayoutRenderer
长话短说 前文<解剖HttpClientFactory,自由扩展HttpMessageHandler>主要想讲如何扩展HttpMessageHandler, 示例为在每个Http请求中的 ...
- HTTPS工作流程(入门)
1.CA(为服务器做担保的第三方机构)将包含CA[公钥C]等信息的[证书C]发送给浏览器: 2.服务器将其[公钥S]和网站信息发送给CA: 3.CA用CA[私钥C]将这些信息加密得到了签名后的[服务器 ...