js基础

2020-03-31  本文已影响0人  看到这朵小fa了么

遍历

可枚举的(enumerable:true),基本类型没有可枚举属性,一般来说原型上的属性是不可枚举的(JSON.stringify()返回的是可枚举属性)
forEach 基于普通for循环 无法结合break return; 无法初始化索引;无法对数组增删、
遍历:

for in 和for of的区别:for in是遍历的是原型和自身的可枚举属性,一般用于对象的遍历,遍历出key,有时按照索引的顺序,所以不用于数组的遍历;for of用于具有迭代器属性的对象遍历,常用于遍历数组,遍历对象的话需要结合Object.keys()

for(var key of Object.keys(student)){
    //使用Object.keys()方法获取对象key的数组
    console.log(key+": "+student[key]);
}

JSON.parse进行深拷贝的缺点:通过转化字符串进行还原,里面的Function、undefined 空对象会丢失,对原型的引用会丢失,对RexExp、typeError对象会返回空对象;NaN、Infinity和-Infinity会变成null;对于循环引用会以$ref标记

日期转换

1、new Date('2020/02/02').getTime()
2、new Date(1580572800000).toDateString()

字符串相关方法

indexOf() 查找 接受第二个参数为起始位置 返回出现的位置或-1
search() 一个参数 接受正则表达式进行查找 但是会忽略-g全局查找 忽略lastIndex 总是从第一个开始查找
slice() 字符串切割 负数+长度处理
substring() 同上不接受负值 0处理
substr() 第二个参数为截取长度 负数+长度处理
String() 对于null undefined返回他们的字符串格式"null" "undefined"

js精度的问题

js使用了IEEE754双精度浮点数的规范,共有64位第一个是符号位S,中间11位M是指数位([-1074, 971]),最后52位E是尾数位(还有一位是隐藏位),精确整数为Math.pow(2,53)-1 超出这个范围则会丢失精度,在计算中将舍弃离结果远的、同样距离则舍弃末位为奇数的数

// 能精确表示的尾数范围上限,S为1个0,E为11个0,M为52个1

二进制移动 >>无符号右移,保留符号位;>>>有符号右移,以符号位填充补位,且负数在计算机中以其绝对值的二进制的补码标示(补码=反码+1),所以有符号的右移将会使数字变大。

js中二进制浮点数0.1+0.2 = 0.3....

js存储是通过转化为二进制进行处理,64 位双精度浮点数的小数部分最多支持53位二进制位,由于浮点数的精度限制,浮点数小数位的限制而截断的二进制数字,再转换为十进制。
解决方案:Number.EPSILON可以用来设置“能够接受的误差范围”。比如,误差范围设为 2 的-50 次方(即Number.EPSILON * Math.pow(2, 2)),即如果两个浮点数的差小于这个值,我们就认为这两个浮点数相等。

Number类型转化

在页面中选中一段文字

var oBtn = document.getElementById("button");
oBtn.onclick = function() {
    var userSelection;
    if (window.getSelection) { //现代浏览器
        userSelection = window.getSelection();
    } else if (document.selection) { //IE浏览器 考虑到Opera,应该放在后面
        userSelection = document.selection.createRange();
    }
    if (userSelection.getRangeAt) {
        alert(userSelection.getRangeAt(0));
    } else {
        alert("当前浏览器不支持getRangeAt");
    }
};

函数

Number Boolean String

使用构造函数创造出来的基本对象,会返回构造出来的实例,typeof为object,Boolean转化为true


image.png

数字

toFiexed() 指定小数位
toExponential()指定数字和指数位
toPercision() 指定数字位

字符串

slice() 所有负值都与length想加
substr() 第一个负值与length想加,第二个负数转为0
substring() 所有负数转为0

属性标识

特性只能设置和获取当前实例对象,常规定义的对象属性,初始属性为true,可写writable 可读enumerable 可配置configurable,修改属性标识用Object.defineProperty(),使用该方法时不填写属性标识默认为false

let name = {age: 12}
let descriptor = Object.getOwnPropertyDescriptor(name, 'age')
descriptor // {value: 12, writable: true, enumerable: true, configurable: true}
Object.defineProperty(obj, propertyName, descriptor) 
Object.defineProperties(obj, {})  // 支持多属性

访问器属性

与普通属性不同,访问器属性拥有getter setter enumerable configurable 属性标识,通过getter setter来实现属性的获取和设置,一个属性只能为两种属性其一,通过访问器属性可以控制,其中set和get可以只设置一个,未设置则无效

上一篇 下一篇

猜你喜欢

热点阅读