JavaScript的数据类型和数据类型的检测
数据类型
JavaScript的基础数据类型有,NaN string undefined Null Boolen Symbol Bigint 这些都是基础数据类型,还有一个引用数据类型,object。
而object又分为 ,array(数组),regexp(正则表达式) ,date(日期), math(数学函数), function(函数)
基础数据类型会存在栈内存中,这种储存在复制的时候会创建一个完全一样的变量
引用数据类型会存在堆内存中。
数据类型的检测
数据类型的检测主要分为三类
1.typeof
typeof方法可以检测基础数据类型,用法如
var a=1
conselo.log(typeof a)//number
或者typeof(a)
注意
在使用typeof的时候是无法判断引用数据类型的,如果知识用于判断基础数据类型的话建议写一个if判断
判断是否为基础数据类型,如果不是就进行下一步验证
2.instanceof
通过instaneof能判断这个函数是否为之前那个构造函数生成的对象,用法如:
let car = function () { }
let bwm = new car()
console.log(bwm instanceof car);//true
let Car = new String('x7')
console.log(Car instanceof String);//true
let str = "ccc"
console.log(str instanceof String);//false
如何自己写一个验证方法?
function myInstanceof(left, right) {
// 这里先用typeof来判断基础数据类型,如果是,直接返回false
if(typeof left !== 'object' || left === null) return false;
// getProtypeOf是Object对象自带的API,能够拿到参数的原型对象
let proto = Object.getPrototypeOf(left);
while(true) { //循环往下寻找,直到找到相同的原型对象
if(proto === null) return false;
if(proto === right.prototype) return true;//找到相同原型对象,返回true
proto = Object.getPrototypeof(proto);
}
}
// 验证一下自己实现的myInstanceof是否OK
console.log(myInstanceof(new Number(123), Number)); // true
console.log(myInstanceof(123, Number)); // false
// 这里先用typeof来判断基础数据类型,如果是,直接返回false
if(typeof left !== 'object' || left === null) return false;
// getProtypeOf是Object对象自带的API,能够拿到参数的原型对象
let proto = Object.getPrototypeOf(left);
while(true) { //循环往下寻找,直到找到相同的原型对象
if(proto === null) return false;
if(proto === right.prototype) return true;//找到相同原型对象,返回true
proto = Object.getPrototypeof(proto);
}
}
// 验证一下自己实现的myInstanceof是否OK
console.log(myInstanceof(new Number(123), Number)); // true
console.log(myInstanceof(123, Number)); // false
instanceof可以准确的判断数据的引用类型,但是无法判断基础数据类型
注意:为了代码的严谨性,不建议单独用typeof或者instanceof,建议两者混合编写
__EOF__

本文作者:xiaopo
本文链接:https://www.cnblogs.com/xiaopo/p/14286893.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/xiaopo/p/14286893.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律