当前位置:网站首页>你不知道的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
边栏推荐
- MATLAB怎么在图像中显示nii文件切片信息?
- Massive remote sensing data processing and application of GEE cloud computing technology [basic, advanced]
- 【江科大自化协stm32F103c8t6】笔记之【入门32单片机及EXTI外部中断初始化参数配置】
- XMLBean的基础运用
- R - GIS: how to use R language implementation of GIS geospatial analysis and model prediction
- 基于PyTorch深度学习无人机遥感影像目标检测、地物分类及语义分割
- Diwen serial screen production (serialization 1) ===== preparation work
- 高集成度 MCU 市场增大,如何加速 BLDC 领域落地应用
- 超详细的PCB高可靠辨别方法
- 海量遥感数据处理与GEE云计算技术应用【基础、进阶】
猜你喜欢
随机推荐
ipconfig命令指南
Through the bit operations to convert the characters are case sensitive
QT serial and CAN dynamic real-time display the log data
Insertion Sort in Classic Sort
迪文串口屏幕制作(连载一)=====准备工作
与所有 ARM 工具、软件兼容?韦斯佰瑞这款MCU内核值得关注!
【江科大自化协stm32F103c8t6】笔记之【入门32单片机及TIM定时中断初始化参数配置】
How does MATLAB display nii file slice information in the image?
基于遥感解译与GIS技术环境影响评价图件制作(最新导则)
对于国内数据交换平台的分析
QT每周技巧(3)~~~~~~~~~串口添加
Kaggle-M5
"R Language + Remote Sensing" Comprehensive Evaluation Method of Water Environment
UAV ecological environment monitoring, image processing and GIS data analysis
2021 soft exam intermediate pass
R - GIS: how to use R language implementation of GIS geospatial analysis and model prediction
User password encryption using Bcrypt instead of MD5, SHA1 and SHA256
Massive remote sensing data processing and application of GEE cloud computing technology [basic, advanced]
多层板的层数,为啥选项都是偶数?就不能选奇数?
OpenLayers (ol包),Vite显示地图(附源码)









