var a = new Date(); a.toGMTString() // "Tue, 13 Nov 2018 10:39:05 GMT" a.toUTCString() // "Tue, 13 Nov 2018 10:39:05 GMT"
var a = new Date(); a.toISOString() "2018-11-13T10:39:05.329Z"
nodejs相关代码,设置缓存相关时间javascript
var lastModified = stat.mtime.toUTCString(); res.setHeader("Last-Modified", lastModified); res.setHeader("Expires", expires.toUTCString());
function Promise(fn) { var thenResovleSave = function() {}; var resolve = function (value) { if (value && value.then) { runFun(value.then) return ; } // console.log('in rs', value); thenResovleSave(value); thenResovleSave = null; } function runFun(fn) { fn(resolve); } runFun(fn); this.then = (cb) => { return new Promise(function(rs) { thenResovleSave = function(res) { rs(cb(res)); } }); }; } var p = new Promise(function(rs, rj) { setTimeout(function() { var result = Math.random() <= 1 ? 1 : 0; if (result) { rs('1'); } else { rj('rejected1'); } }, 500) }); var c = new Promise(function(rs, rj) { setTimeout(function() { var result = Math.random() <= 1 ? 1 : 0; if (result) { rs('c1'); } else { rj('rejected1'); } }, 500) }); p.then(function(res) { console.log('then1', res) return c; }).then(function(res ){ setTimeout(() =>{ console.log('then2', res); },1000) });
js全部的数字类型都是双倍精度的浮点型,都是采用了IEEE754标准。
java
每一个数字都是以64位(8字节)来存储。64位分3部分:node
符号位S:第 1 位是正负数符号位(sign),0表明正数,1表明负数
指数位E:中间的 11 位存储指数(exponent),用来表示次方数
尾数位M:最后的 52 位是尾数(mantissa),超出的部分自动进一舍零promise
用二进制来保存,就会致使十进制转二进制的时候存在循环,被舍去。致使精度问题。
好比0.1 表示:
1.1001100110011001100110011001100110011001100110011001100110011001..... * 2 ^ -4
S位为0
E为 01111111011(1023 - 4 = 1019 1019 转二进制并补齐11位为01111111011)
M为1001100110011001100110011001100110011001100110011010(截取52位,四舍五入,由于丢掉了剩下的部分,致使精度问题)dom
因此数字最大为2^53-1 === Number.MAX_SAFE_INTEGER === 9007199254740991post
使用 52 位表示一个数的整数部分,那么最大能够精确表示的数应该是 2^52 - 1 才对。
就像 64 位表示整数时那样: 2^63 - 1 (去掉 1 位符号位)。
但其实浮点数在保存数字的时候作了规格化处理,以 10 进制为例:
20*10^2 => 2*10^3 //小数点前只须要保留 1 位数
对于二进制来讲, 小数点前保留一位, 规格化后始终是 1.***, 节省了 1 bit,这个 1 并不须要保存。this
位运算符用于对二进制位进行计算,这些位运算符直接处理每个比特位(bit)
虽然js数字存储是64位存储, 可是位运算将数字转换为32位有符号整数。(小数部分直接被忽略,go java都不支持对非整数的位运算)。code
因此位运算的有效位为2^32 - 1 === -1 >>> 0 === (0x100000000 - 1) === 4294967295blog