coolcao的小站

coolcao的code点滴


  • 首页

  • 分类

  • 归档

  • 标签

  • 关于

js中0.1+0.2为什么不等于0.3

发表于 2016-10-12   |   分类于 技术博客 , 原创

前两天看了小胡子哥写了一篇js中浮点数运算的一个比较特殊的0.1+0.2的问题,揭秘 0.1 + 0.2 != 0.3,略感小胡子哥写的还是稍微粗略,于是查各种资料,将包括IEEE754关于浮点数二进制的只是又整理一下,做此记录。

阅读全文 »

js对象的toString()方法和valueOf()方法

发表于 2016-08-19   |   分类于 技术博客 , 原创

在研究js的==和===的区别时,曾经说过,在js中非原始值对象,要参加运算需要ToPrimitive(x)转换成原始值类型。
在ToPrimitive(x)时,我们曾得出结论:

ToPrimitive

  • ToPrimitive(input,hint)转换为原始类型的方法,根据hint目标类型进行转换。
  • hint只有两个值:String和Number
  • 如果没有传hint,Date类型的input的hint默认为String,其他类型的input的hint默认为Number
  • Number 类型先判断 valueOf()方法的返回值,如果不是,再判断 toString()方法的返回值
  • String 类型先判断 toString()方法的返回值,如果不是,再判断 valueOf()方法的返回值

也就是说,js中的对象离不开toString()方法和valueOf()方法。那到底何时用toString()方法,何时用valueOf()方法呢?怎么用?

阅读全文 »

es6中promise的研究

发表于 2016-08-16   |   分类于 技术博客 , 原创

学习了es6有一段时间了,对promise的概念也有一定的了解,起先觉得概念上挺简单的,但是在实际操作中却发现,用起来却没那么顺利。
首先,我们先看一个问题,有一个国外的哥们写的一篇博客,关于promise的研究上开篇提出来的问题,大家有兴趣可以看一下原文:https://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html

下面这四个调用方式,返回结果有什么不同,运行方式有什么不同。

1
2
3
4
5
6
7
8
9
10
11
doSomething().then(function () {
return doSomethingElse();
});

doSomething().then(function () {
doSomethingElse();
});

doSomething().then(doSomethingElse());

doSomething().then(doSomethingElse);
阅读全文 »

ecmasrcipt类型转换

发表于 2016-08-12   |   分类于 技术博客 , 原创

之前写了一篇 《js中==和===的区别.md》,其中提到了 ToPrimitive(),转换为原始类型的方法。这个方法中,其实也引用到了其他的类型转换,比如,ToBoolean()转换为Boolean类型,ToNumber()转换为数字类型等等,但是这些方法具体是怎么执行的,并未做说明,今天就看看ecma中对类型转换的几个方法的说明。

阅读全文 »

js的位操作

发表于 2016-08-09   |   分类于 技术博客 , 原创

今天在看js的Array的方法时, 看到源码中有下面的一段代码, 挺有意思, 是关于位运算的, 就拿来研究了一下:

1
var len = t.length >>> 0;

这里使用了 >>> ,无符号右移运算符, 还右移了 0 位, 初看有点蒙, 到底啥意思? 带着疑问做了如下实验:

1
2
3
4
5
6
7
8
9
10
11
12
console.log(1 >>> 0);               //1
console.log(1.1 >>> 0); //1
console.log(NaN >>> 0); //0
console.log(true >>> 0); //1
console.log(false >>> 0); //0
console.log('a' >>> 0); //0
console.log('123' >>> 0); //123
console.log('a123' >>> 0); //0
console.log({} >>> 0); //0
console.log(function() {} >>> 0); //0
console.log(null >>> 0); //0
console.log(undefined >>> 0); //0

从结果来看,不管是什么类型的数据,都被强制转换成了整型。 为什么 >>> 运算符会如此呢?这要从js的位运算符说起。

阅读全文 »

计算机中的负数为什么使用补码表示

发表于 2016-08-06   |   分类于 技术博客 , 原创

我们都知道,在计算机的内部,所有的数据都是以二进制的形式存储的,为了区分正数和负数,在最高位拿出来当作符号位,0表示正数,1表示负数。而且,负数的存储,除了最高位的符号位,其他位使用的是补码的形式存储的。
计算一个数值的二进制补码,以下3个步骤:

  • 求这个值的绝对值的二进制原码
  • 原码取反,得到反码
  • 反码加1,即是补码
阅读全文 »

js中==和===的区别

发表于 2016-08-06   |   分类于 技术博客 , 原创

做js的时候,也没仔细的研究过==和===两个操作符之间的具体区别,但是本着实事求是的态度,今天上网查了一下他们两个的区别,最后得出的结论是:

1
2
`===` 严格相等,会比较两个值的类型和值
`==` 抽象相等,比较时,会先进行类型转换,然后再比较值

然后我就更迷惑了,先类型转换,我擦,怎么转换,左边转换成右边类型还是右边转换成左边类型?

阅读全文 »

ES6初探之Promise

发表于 2016-08-02   |   分类于 技术博客 , 原创

在es6中新添加了一个Promise对象,其实这并不是“新”的概念,很早之前就有了promise规范,在es6之前有很多第三方库对其做了实现,es6对其进行原生实现。Promise规范的提出是为了解决异步编程中回调函数的“滥用”。

promise的三种状态:

  • pending 等待状态
  • resolved 完成状态
  • rejected 拒绝状态
    promise的三种状态,只能是pending->resolved或者pending->rejected,不能有其他类型的状态转换,并且状态一旦发生转换,就不再发生变化。
阅读全文 »

promise和co搭配生成器函数方式解决js代码异步流程的比较

发表于 2016-07-24   |   分类于 技术博客 , 原创

在es6中引入的原生Promise为js的异步回调问题带来了一个新的解决方式,而TJ大神写的co模块搭配Generator函数的同步写法,更是将js的异步回调带了更优雅的写法。
今天我想对比一下这两种方式,来看看这两种方式的区别以及优劣。

阅读全文 »

angular自定义filter

发表于 2016-02-05   |   分类于 技术博客 , 原创

angular除了几个自带的常用的filter,还可以自定义filter,以满足不同的需求,简单研究了一下自定义filter,记录一下。
有如下场景,后台返回的数据中,status可能是英文字符串,如果在html中使用if进行挨个判断,则显得有些啰嗦,这样我们就可以使用自定义的filter实现

阅读全文 »
<上一页>1…8910<下一页>

93 日志
15 分类
114 标签
RSS
GitHub 微博
© 2015 - 2025 coolcao
由 Hexo 强力驱动
主题 - NexT.Mist