当前位置:网站首页>你不知道的JS思考题
你不知道的JS思考题
2022-07-30 05:45:00 【没事下辈子小心点】
思考题
能够在基本语法中解决一些常见问题就行
类型与语法
1、对比空值和对象的类型
思路:
typeof null === "object"
typeof {
} === "object"
答案
var a =null ;
(!a && tpeof a === 'object);
补充:
内置类型typeof
null "object" 祖传bug
undefined "undefined"
boolean "boolean"
number "number"
string "string"
object "object" 除了对象以外,其他统称基本类型
symbol "symbol"
2、区分未定义和未声明
思路:
var a;
a; undefind 只声明,未赋值 不会错误
b; ReferenceError : b is not undefind 未声明 可用typeof的安全机制,具体情况具体分析
补充
typeof 处理这两个的时候都是返回 "undefined",即使未声明,他都可以安全机制不报错
3、如何在检查全局变量DEBUG,才不会出现ReferenceError错误
思路:
1、使用typeof
2、检查所有权全局变量是否是全局对象的属性
补充:
对非全局变量来说,typeof的安全防范机制(阻止报错)也很有用,但是必须检查变量是否已经定义。
值
1、0.1+0.2=0.3吗?
思路:
二进制浮点数的最大的问题,在IEEE 754标准中,二进制浮点数并不是十分精确,所以无法相等。
设置误差值机器精度,对JS而言一般是2^-52=2.220446049250313e-16,也就是Math.pow(2,-52),ES6以后这个东西在Number.EPSILON里也就是说
if(!Number.EPSILON){
Number.EPSILON = Math.pow(2,-52);
}
简单的,想要对比两个数字是否相等,也就是在误差内
function numberCloseEnoughToEqual(n1,n2){
return Math.abs(n1-n2) < Number.EPSILON;
}
numberCloseEnoughToEqual(0.1+0.2,0.3) //true
补充:
能够被精确展示的最大整数是2^53-1,Number.MAX_SAFE_INTEGER=9007199254740991
最小整数是Number.MIN_SAFE_INTEGER=-9007199254740991
不在这个范围内的都必须转换为字符串才可以精确对比,比如64位数的ID
2、检查一个数是不是整数
可以使用内置方法,Number.isInteger,下面是实现
if(!Number.isInteger){
Number.isInteger=function(num){
return typeof num == "number" && num %1 ===0;
};
}
检查一个安全的整数 Number.isSafeInteger,实现如下
if(!Number.isSafeInteger){
Number.isSafeInteger = function(num){
return Number.isInteger(num) &&
Math.abs(num) <= Number.MAX_SAFE_INTEGER;
};
}
3、对比一些特殊数值
null 是空值,曾经定义过,是特殊的关键字,不是标识符,不能当作变量和赋值
undefined 是没有值,没有赋值过,是一个内置标识符,可以当作变量(千万别,永远不要重新定义它)
0和-0,有些需要代表方向信息的时候会用到,P27页,用到再看
== 和 === 有什么区别,和Object.is("d",NaN)有什么区别?效率呢?P77
一些知识点
undefined 可以用void 0 来得到,它使得所有返回都为undefined
//
return void setTimeout(doSomething,100);
//
setTimeout(doSomething,100);
return;
//
NaN,也就是无效数值,坏数值,指出数字类型中的错误情况,“执行数学运算没有成功,这是失败后返回的结果”,要想判断是不是运算失败了,可以:
利用全局内建工具函数,有缺陷
window.isNaN(2/d3) //true
window.isNaN(2/0) //false 因为结果是`Infinity`,
window.isNaN(Infinity/Infinity) //true 因为这是一个运算未定义
Number.isNaN("f") //true 错误
利用内置函数Number.isNaN,完美
Number.isNaN(2/d3) //true
Number.isNaN(2/0) //false 结果是`Infinity`,无穷数,出现无穷后就无法有穷
Number.isNaN(Infinity/Infinity) //true 因为这是一个运算未定义
Number.isNaN("f") //false 正确
更简单的办法,因为NaN不等于自身:
if(!Number.isNaN){
Number.isNaN = function(n){
return n !== n;
};
}
Infinity,是无穷,有以下运算
Number.isNaN(Infinity/Infinity) //true 因为这是一个运算未定义
0/Infinity //0
1/Infinity //0
-1/Infinity //-0
Infinity/Infinity //NaN
声明会提升,即使你没有进入if语句,这个声明都会被var提升到全局作用域的最顶层
数组
list.length会被a[“12”]=45干扰变成13
arguments 是一个类数组对象。代表传给一个function的参数列表。
不建议用数组来存储键值对,但注意:a[“12”]=12的长度是13
边栏推荐
- Kunlun State Screen Production (serialization 4) --- Basics (graphical setting and display, button lights)
- QT serial 3: LORA test platform based on QT and STM32H750 (2)
- 边境的悍匪—Kaggle—泰坦尼克号生还预测详细教程
- 基于OpenCV的相机标定流程
- Based on R language geographic weighted regression, principal component analysis, discriminant analysis and other spatial heterogeneity data analysis
- 与所有 ARM 工具、软件兼容?韦斯佰瑞这款MCU内核值得关注!
- Knowledge distillation method of target detection
- 边境的悍匪—机器学习实战:第十三章 使用TensorFlow加载和预处理数据
- Analysis of domestic data exchange platforms
- TCP为什么要三次握手,握手过程中丢包会怎么样?
猜你喜欢

常用损失函数(二):Dice Loss

Rsync实现Win系统间的文件夹或数据同步

【速成MSP430f149】电赛期间学习MSP430f149笔记

什么是过拟合、欠拟合现象以及如何缓解?

CLUE Model Construction Method, Model Validation and Land Use Change Scenario Prediction

OpenLayers (ol包),Vite显示地图(附源码)

边境的悍匪—机器学习实战:第四章 训练模型

Application of remote sensing, GIS and GPS technology in hydrology, meteorology, disaster, ecology, environment and health

2021-09-16 集成学习上--task1机器学习数学基础

海量遥感数据处理与GEE云计算技术应用【基础、进阶】
随机推荐
【正点原子】sys.c、sys.h位带操作的简单应用
UAV ecological environment monitoring, image processing and GIS data analysis
The application of Meta analysis in the field of ecological environment
【青岛站】SWAT模型高阶应用暨无资料地区建模、不确定分析与气候变化、土地利用对面源污染影响模型改进及案例分析研讨
边境的悍匪—机器学习实战:第十一章 训练深度神经网络
昆仑通态屏幕制作(连载4)---基础篇(图形设定与显示,按钮灯)
常用损失函数(二):Dice Loss
逻辑右移和算术右移区别
R language application in the field of ecological environment
干货 | 什么是FOC?一文带你看BLDC电机驱动芯片及解决方案
clinit方法
Three working modes of CPU: real mode, protected mode, long mode
Map making of environmental impact assessment based on remote sensing interpretation and GIS technology (the latest guidelines)
关于map对key自定义排序
【江科大自化协stm32F103c8t6】笔记之【入门32单片机及GPIO初始化参数配置】
HSPF model application
原创 Acegi 1.03 安全机制
QT串口动态实时显示大量数据波形曲线(四)========“界面的美化与处理”
R语言 生态环境领域应用
关于 PCB 多层板制程能力不得不说的那些事儿