深入浅出Javascript 'typeof '操作符

SAP子公司财务账套配置实战:从公司代码到记账期间变式的关键步骤 本文详细介绍了为SAP子公司快速配置财务账套的实战步骤。通过复用母公司成熟配置,重点阐述了从创建公司代码、关联控制范围到分配记账期间变式的核心流程,帮助顾问在一两个小时内完成核心骨架搭建,实现高效集团财务管控。 阅读详情

'typeof '运算符用起来的感觉还真有点像开着一部破旧的小车或是用一台早期的戴尔Inspiron系列电脑。 为了完成工作,你往往又不得不学会适应这种怪癖操作符。

但是你还是应该学会如何改善你的使用方法。

在本文中,我在介绍一款新式小函数之前,我将对'typeof '操作符做一个简短的复习。这个函数具有全加载、更坚实的可靠性和灵活性等优良品质,且直接使用了

Javascript的核心语法。

 typeOf 运算符

 它究竟怎么用呢?

因为typeof 是单运算符 ,那么它的运算域就是紧挨它本身.  而不需要额外的标点符号。

typeof2//"number"
typeof"belladonna"//"string"

 

但是当我想像调用函数那样的调用它,会是怎么样的结果呢

 typeof 运算符本身不是函数的。你可以用括号定义它的作用域,这样它看起来就像一个函数了。但是括号仅仅是一种分组的运算符 ,在给杂乱排序的优先级上仅次于逗号运算符。事实上, 你可以用任何其他标点符号来修饰它的作用域

typeof (2)//"number"

typeof(2)//"number"

typeof ("a", 3)//"number"

typeof (1 + 1)//"number"

 

它的返回值是什么呢?

返回值是一种运算域类型的独有的表述. 请看下面的列表清单

变量类型 返回值
Undefined“undefined“
Null“object“
Boolean“boolean“
Number“number“
String“string“
Object (native and not callable)“object“
Object (native or host and
callable)
“function“
Object (host and not
callable)
Implementation-defined

typeof有什么问题呢?

最明显的问题就是 typeof null 居然返回 一个“object” 对象。 这明显是一个误解。在ECMAScript下一个版本,已经将这个问题的解决方案收纳,然而还是不可置疑的它将引进来一些对以前版本的兼容性问题 。

 
1var a;
2typeof a; //"undefined"
3typeof b; //"undefined"
4alert(a);//undefined
5alert(b);//ReferenceError

比起其他操作符, typeof 并没有多大的区别。当typeof 被用于任何一种object类型,它返回object。它和其他通用对象,和内置类型

 (Array, Arguments, Date, JSON, RegExp, Math, Error, and the primitive wrapper objects Number, Boolean and String)等也区别不大。

你可以看到广大程序员对下面这个返回值的抱怨。

typeofNaN//"number"

但是这并不是typeof的错,因为标准已明确的声明NaN是一个真实的数字。 

一种刚好的方式?

[[Class]]

每一个JavaScript 对象都有一个内置属性 [[Class]] 。ES5 指定有一对方括号来描述内置属性, i.e. 的抽象属性 过去指定了JavaScript 引擎的行为。通过ES5, [[Class]] 是一个String对象的值,规范了objects的定义.  对于你和我来说,这意味着内置对象都有一个唯一的不可编辑的标准值赋给它们各自的[[Class]] 属性。这可能对于我们获得[[Class]] 属性的值是非常有用的…

Object.prototype.toString

... ...事实证明,我们可以。以一个在ES 5的外观规格为Object.prototype.toString ...

  1. Ø ToObject通过了呼吁的结果作为参数值 。
  2. 让类的价值[类]]内部属性 Ø。
  3. 返回字符串值,它是连接三根弦“对象”,阶级,和“]” 。

总之,目标函数默认的 toString返回一个字符串,格式如下 ...

[对象[类] ]

... ... [类别]是对象类的属性。

不幸的是,专门的内置对象的toString的自己的方法大多是覆盖Object.prototype.toString ...

1 [1,2,3]的toString(); / / 1,2,3“
2  
3 (新 日期)的toString(); / /“星期六八月06 2011年16时29分13秒格林尼治标准时间0700(PDT)的”
4  
5 / AZ / .toString(); / / / AZ /“

 
... ...幸运的是我们可以使用呼叫功能,以 迫使通用的toString在他们的功能...

1 Object.prototype.toString.call([1,2,3]); / /“[对象数组]”
2  
3 Object.prototype.toString.call(新 日期); / /“对象日期]”
4  
5 Object.prototype.toString.call(AZ / /); / /“的RegExp对象]”

 
在介绍该toType功能

我们可以利用这种技术,添加一个正则表达式的下降,并创建一个微小的功能-一个新的和改进的版本typeof运算操作符 ...

1 VAR toType = 功能(OBJ){
2   返回 ({}). toString.call(OBJ)。匹配(/ \ S([A - ZA - Z的]+)/)[ 1]。与toLowerCase()
3 }

(因为一个新的模式,通用对象总是会使用 ToString 函数定义Object.prototype的,我们可以放心地使用作为缩写Object.prototype.toString ({}).的 toString)

让我们来试试... ...

01 toType({A:4}); / /“对象”
02 toType([1,2,3]); / /“阵列”
03 (函数(){(toType的console.log(参数))})(); / /参数
04 toType(新 ReferenceError); / /“错误”
05 toType(新 日期); / /“日期”
06 toType(AZ / /); / /“REGEXP”
07 toType(数学); / /“数学”
08 toType(JSON); / /“JSON”
09 toType(新的电话 号码(4)); / /“数”
10 toType(新 的String(“ABC” )); / /“字符串”
11 toType(新 布尔(真)); / /“布尔”

..现在,我们将运行相同的测试与typeof运算符(尽量不要幸灾乐祸) ... ...

01 typeof运算 {A:4} / /“对象”
02 typeof运算 [1,2,3]; / /“对象”
03 (函数(){的console.log(typeof运算 参数)})(); / /对象
04 typeof运算 新 ReferenceError; / /“对象”
05 typeof运算 新的 日期; / /“对象”
06 typeof运算 / AZ / / /“对象”
07 typeof运算 数学; / /“对象”
08 typeof运算 的JSON / /“对象”
09 typeof运算 的新 号码(4); / /“对象”
10 typeof运算 新 的String(“ABC” ); / /“对象”
11 typeof运算 的新 布尔(真); / /“对象”

 
鸭打字比较

鸭打字检查对一个给定的类型(像鸭子散步,像鸭子的谈判... ...)的已知属性的列表中的对象的特点。由于typeof运算操作符的作用有限,鸭,打字在JavaScript中很受欢迎。它也容易出错。例如参数的函数对象都有一个长度属性和数字索引的元素,但它仍然不是一个数组 。

使用toType是一个可靠和易于的替代鸭打字 。可靠的,因为它直接谈判的对象,这是由浏览器引擎,是不可编辑的内部属性;容易的,因为其三个词检查。

这里的一个例证-一个片段,它定义不符合标准的JSON对象。jsonParseIt函数接受一个函数作为参数,它可以用它来 ​​测试之前,用它来 ​​解析JSON字符串的JSON对象的真实性... 。

1 window.JSON = {分析:函数(){警报(“我不是真正的JSON -失败!” )}};
2  
3 功能 jsonParseIt(jsonTest){
4    (jsonTest()){
5     返回 JSON.parse(“{”A“:2}” );
6   } 其他 {
7     警报(“不符合标准的检测到的JSON对象!“) ;
8   }
9 }

让我们运行它,鸭打字第一... ...

jsonParseIt(函数(){ 返回 JSON&&(typeof运算 JSON.parse == “功能” )})
/ /“我没有真正的JSON - 失败!”

... ...哎呦... ...现在与toType测试... ...

jsonParseIt(函数(){ 返回 toType(JSON)== “JSON” });
/ /“不符合标准的JSON对象检测!”

toType可靠保护,对内置的JavaScript对象与冒名顶替的恶意交换?大概不会,因为行为人想必也可以交换toType功能。一个更安全的测试可能会直接调用({}).的toString ...

函数(){ 返回 ({}). toString.call(JSON)的indexOf(“JSON” )> -1}

..但即使这会失败,如果Object.prototype.toString本身就是恶意重新编写的。静止每个额外的防御帮助。

比较到的instanceof

instanceof 运算符测试的原型链中的第一个操作数为原型属性的第二个操作数(第二个操作数预计将是一个构造函数,如果它不是一个函数,将抛出一个TypeError)存在:

1 新 的日期的 instanceof日期; / / TRUE
2  
3 [1,2,3] 的instanceof 阵列; / / TRUE
4  
5 功能 CustomType(){};
6 新 CustomType 的instanceof CustomType; / / TRUE

 
在它面前,这似乎是一个不错的类型检查器的内置插件举行的承诺,但也有碰壁,这种方法至少有两个:

1。不具有关联的几个内置对象(数学,JSON和参数)构造函数的对象-所以他们不能与类型检查的instanceof运算符。

数学的instanceof 数学/ /类型错误

2。作为@ kangax和其他人指出,一个窗口可以包括多个帧,这意味着全球多个上下文和每种类型的,因此多个构造。在这样一个环境,一个给定对象的类型是不保证的instanceof是一个给定的构造... 。

1 VAR 的iFrame = document.createElement(“IFRAME” );
2 document.body.appendChild(IFRAME);
3  
4 VAR = window.frames [1]的数组。
5 VAR 阵列= 新 IFrameArray();
6  
7 阵列的instanceof 阵列; / /假
8 阵列的instanceof IFrameArray; / /结果为true;

 
类型检查主机对象

主机对象是浏览器的ES5标准不指定创建的对象 。所有DOM元素和全局函数的宿主对象。ES5下降到指定返回值typeof运算,适用于主机对象时,它也不建议值[类]主机对象的财产。其结果是,跨浏览器的主机对象的类型检查一般是不可靠的:

01 toType(窗口);
02 / /“全球”(镀铬)“domwindow”(Safari浏览器)“窗口”(FF/IE9)“对象”(IE7/IE8)
03  
04 toType(文件);
05 / /“的HTMLDocument”(浏览器/ FF / Safari浏览器)的“文件”(IE9)“对象”(IE7/IE8)
06  
07 toType(document.createElement('A' ));
08 / /“htmlanchorelement”(铬/ FF / Safari浏览器/ IE)“对象”(IE7/IE8)
09  
10 toType(警报);
11 / /“职能”(Chrome/FF/Safari/IE9)“对象”(IE7/IE8)

 
元素的最可靠的跨浏览器测试,可能是检查了存在的 nodeType属性 ...

功能 isElement(OBJ){
  返回 obj.nodeType;
}

 
... ...但是,鸭打字,所以没有任何保证 ;-)

一个toType功能应该在哪里生活?

为了简便起见,我的例子中定义toType,作为一个全球性的的功能。扩展Object.prototype的将你抛出的龙 -我的喜好将直接扩展对象,它反映ES5(和建立该公约的Prototype.js在这之前)。

1 Object.toType = 功能(OBJ){
2   返回 ({}). toString.call(OBJ)匹配(/ \ S([AZ |排列]+)/)[ 1]与toLowerCase();
3 }

 
另外,你可以选择, UTIL一个属于自己的命名空间,如添加toType的功能。

我们可以得到一个小聪明(窗口 Chrome的使用“全局”的启发。[[类 ]) 。,包装在一个全球性的的模块中的功能,我们可以找出全局对象:

1 Object.toType =(功能 toType(全球){
2   返回 功能(OBJ){
3     如果 (OBJ ===全球){
4       返回 “全球性” ;
5     }
6     返回 ({}). toString.call(OBJ)匹配(/ \ S([AZ |排列]+)/)[ 1]与toLowerCase();
7   }
8 })( )

 
让我们来试试... ...

1 Object.toType(窗口); / /“全球”(所有的浏览器)
2 Object.toType([1,2,3]); / /“阵列”(所有浏览器)
3 Object.toType(/ AZ /); / /“REGEXP”(所有浏览器)
4 Object.toType(JSON); / /“JSON”(所有浏览器)
5 / /等等。

 
没有做什么toType

toType功能不能保护从未知类型的投掷ReferenceErrors ...

Object.toType(FFF); / / ReferenceError

更确切地说,它是调用 toType抛出的错误,而不是函数本身 。反对,唯一的后卫(如与任何函数调用),养成良好的代码卫生... ...

window.fff&Object.toType(FFF);

总结

我胡说在更长的时间比我打算 - 那么恭喜,如果你这里,我希望你觉得它有用。我介绍了很多地面和可能犯了一些错误 - 请随时让我知道他们。此外,我很乐意听到其他人的冒险类型检查。


高云FPGA系列教程(8):ARM串口数据接收(中断和轮询方式) GW1NSR-4C ARM部分共有2个串口外设,都挂载在APB1总线上,最高支持波特率921.6Kbit/s,无奇偶校验位,8位数据位,1位停止位,支持高速测试模式 HSTM(High Speed Test Mode),即每个时钟周期输出1位数据,可以在短时间内传输大量数据。官方手册上没有描述发送和接收缓存FIFO的深度,所以不确定是否支持缓存。 阅读详情

相关推荐

2026年(新服务器默认密码)最新各大厂商默认凭证大全

本文整理了国内外主流服务器厂商的默认管理接口凭证信息,包括Dell、HPE、浪潮、华为等品牌的管理接口类型、默认用户名/密码和IP地址。特别强调国产服务器在信创环境下的安全风险,指出国内厂商部分型号仍保留固定默认密码(如浪潮admin/admin),而国际厂商多采用随机密码标签。文章提供了新机初始化安全流程建议:查找机箱标签、立即修改默认密码、配置网络隔离、更新固件等。最后提醒运维人员,服务器安全应从首次上电开始重视,管理接口暴露是重大风险点,必须严格执行安全规范。

你好,旧时光! 1710

typeof操作符

背景 JavaScript支持中支持5种简单数据类型

Bob Liu的程序人生 1737

从零开始学版图(二)-----------差分放大电路

从零开始学版图

m0_56112720的博客 8562

typeof 操作符

typeof 操作符返回一个字符串,表示未经计算的操作数的类型。(MDN)typeof 可以用来检测一个值的类型。

2401_82968855的博客 932

避开这5个坑!用MATLAB做核密度估计时90%人会犯的错误

本文详细解析了使用MATLAB进行核密度估计时常见的5个高频错误,包括三维数据可视化、带宽参数优化、大数据量处理、核函数选择及版本兼容性问题。特别针对核密度估计中的关键参数带宽(bandwidth)提供了数据驱动的优化策略,帮助用户提升分析精度与效率。

jenkins8butler的博客 277

虚拟机器人平台CoppeliaSim(Vrep)的逆运动学教学

相信看这篇博客的人都知道CoppeliaSim是做什么的,因此这里不多赘述。CoppeliaSim从最早的Vrep到现在已经更新了N个版本,从过去Vrep3.x开始使用的我这里小小地吐槽一下这个软件。CoppeliaSim每一个版本都有更新,问题是这些更新有时候不能向前兼容,而且时不时更新地让人不知所措(对于有紧急任务的时候真的很火大啊)。 以本文所展示地逆运动学来说,CoppeliaSim在4.0.0之后又大变,推翻了过往所有的拖动模块链接之类的构建方式,转而采用直接通过代码来实现逆运动学。 简单版逆运动

qq_39243015的博客 6699

【Java 进阶篇】JavaScript `typeof` 操作符详解

typeoftypeof操作符是JavaScript中用于检测值的数据类型的有用工具。通过了解其基本用法和各种可能的返回值,我们可以更好地理解和处理JavaScript中的不同数据类型。但需要注意typeof存在一些特殊情况,例如无法区分数组和对象,以及无法识别null的问题,因此在实际编程中需要小心使用。希望这篇博客对您理解JavaScript中的数据类型和typeof操作符有所帮助。如果您想深入了解JavaScript的其他方面,请随时查看我们的其他教程和文章。如果有任何问题或疑虑,请随时提问。

繁依Fanyi的博客 1196

深入解析GEM5 McPAT NoC功耗模型:从arbiter电容计算到微架构关联

本文深入解析GEM5 McPAT NoC功耗模型,重点探讨arbiter电容计算与微架构的关联。通过拆解动态功耗公式和四类电容的物理本质,揭示能量与功率的转换关系,并提供参数调试和模型精度优化的实战技巧,帮助开发者更准确地预测和优化NoC功耗。

weixin_29305313的博客 201

TypeScript基础之typeof 类型操作符

TypeScript中的typeof常见用途是在类型上下文中获取变量或者属性的类型, 此外还可以配合获取函数的返回值类型, 以及配合 ReturnType 使用获取函数的返回值类型, 以及配合 keyof使用

zxl1990_ok的博客 6005

YOLO26小目标检测实战:STAL标签分配+MuSGD优化,VisDrone数据集漏检率降50%

小目标检测是计算机视觉的经典难题,而VisDrone数据集小目标占比极高:数据集中小目标(像素面积<32×32)占比超过60%,且大量目标仅为几个像素,特征信息极度匮乏;背景复杂且干扰多:无人机航拍场景包含建筑物、树木、人群、车辆等复杂背景,小目标易被背景淹没;尺度变化与遮挡严重:同一目标在不同帧中尺度差异大,且小目标极易被其他目标遮挡;传统模型的固有缺陷标签分配策略(如ATSS、SimOTA)偏向大目标,小目标的正样本分配不足,导致模型对小目标不敏感;

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1186

PyTorch实战(4)——卷积神经网络(Convolutional Neural Network,CNN)

卷积神经网络 (Convolutional Neural Network, CNN) 是一种广泛应用的深度学习模型。通过参数共享、局部感知和空间结构等优势,能够更好地处理图像数据,并在图像识别、目标检测和图像生成等任务中展现出强大的能力。在本节中,介绍了卷积的计算方法以及卷积神经网络的基本组件,并使用 PyTorch 构建了卷积神经网络以深入了解其工作原理。

盼小辉丶的博客 1万+

typeof的语法和使用总结

大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,我们将深入探讨JavaScript中typeof操作符的语法和使用,帮助大家更好地理解和应用这一常见的操作符。通过本文的介绍,相信大家对JavaScript中typeof操作符的语法和使用有了更深入的了解。在JavaScript中,typeof是一个用于检测变量数据类型的操作符。它可以帮助我们了解变量当前存储的数据类型,常用于条件语句中,以便根据不同的数据类型执行不同的操作。

技术研究中心 1158

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

TypeScript 入门

开发环境 1.安装Node.js https://nodejs.org/zh-cn/ 通过 node -v 命令查看本机是否安装,如果没有安装,参考node.js安装指南 根据电脑系统环境进行安装 2.初始化一个 TypeScript 项目 mkdir project && cd project npm init -y npm install -save-dev typescript 3.创建 tsconfig.json 文件 方法一:在vscode 中,点击右下角版本号 方法二: n

王秀龙 276

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

typeof不能够很好的识别参数类型,因此用type封装

typeof不能够很好的识别参数类型,因此用type封装 function type(opts) { var template = { '[object Object]': 'object', '[object Array]': 'array', '[object Number]': 'object——number', '[object Boolean]'...

turn_future的博客 236

初识Vue3常见问题合集

如图:用npm create vite@latest创建号项目后,在main.js中我们可以看见“vue”会标红,并提示找不到模块“vue”1、根据提示在中将的值改为node2、项目跟目录的xxx.d.ts文件中加入。

wxid_mtnujb6ipc0322的博客 1130

AccessGuard v0.1:TS 环境搭建与权限模型定义 — TypeScript 基础类型、枚举与字面量类型深度实战

核心痛点:JavaScript 的弱类型特性让权限系统配置错误在运行时才暴露——一个拼错的权限字符串、一个遗漏的角色映射,可能导致生产事故。TypeScript 的类型系统可以在编译期捕获这些错误,让「权限配置写错一个字母,IDE 就标红」成为现实。本文从零开始,用 TypeScript 的基础类型、字面量类型、枚举和 const 断言构建一个类型安全的 RBAC 权限模型。前置知识:需要掌握 JavaScript 基础语法(ES6+),了解 npm 的基本使用,最好写过 React 组件。

我的博客 283

js 检测数据类型

ECMAScript是松散类型的,而typeof是用来检测变量的数据类型的,返回的结果都是字符串类型。 写法:typeof(1000); 圆括号可以省略。 var a = 123; typeof(a) // “number” var a = “123”; typeof(a) // “string” var a = true; typeof(a) // “boolean” var a...

qq_41818857的博客 133

JavaScript typeof操作符

1. typeof 操作符:用于确定某个变量的数据类型 2. 使用说明: typeof(变量名) 3. 使用typeof得到的变量类型有以下7种: "undefined" 值未定义(值声明了但未初始化 or 未声明) "boolean" 布尔值 "string" 字符串 "number" 数值 "object" 对象、数组(如下图)、null ...

qq_40626218的博客 204

typeof运算符介绍

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33826268的博客 312

javascript中的typeof操作符能返回哪些值?

首先我们要知道javascript中的基本数据类型有哪些: Undefined Null String Boolean Number Object 然后,我们用typeof检验各种可能遇到的情况,以下图片中是我在浏览器中的运行结果,哪些是你不知道的呢? 我猜,你一定不知道null == undefined 会返回true吧,嘿嘿! ...

Dancy的博客...... 3815

typeof运算符

js有一个运算符叫做typeof,这个运算符可以在程序得运行阶段动态得获取变量得数据类型; typeof运算符得语法格式 : typeof 变量名; typeof运算符得运算结果时以下6个字符串之一;注意字符串都是全部小写。 “undefined” “number” “string” “boolean” “object” “function” 我们能用typeof来做些什么? 因为js是弱类型语言,所以它得变量可以不设定数据类型; 但是我们要知道js在ES6之前有6种数据类型: 基本数据类型:undefin

weixin_46876531的博客 660

JS中判断数据类型的方法

1、typeof (1)、返回类型7种: undefined、boolean、symbol、number、string、object、function。 (2)、 typeof null 返回 object (3)、引用类型中的 数组、日期、正则 也都有属于自己的具体类型,而 typeof 对于这些类型的处理,只返回了处于其原型链最顶端的 Object 类型 2、toString 这个是最完美的...

weixin_44846723的博客 270
上一篇: CheckBoxList垂直方向对齐问题
下一篇: 随意注释掉代码的代码猴子。
安欧碰麦蔻德
博客等级 码龄19年 17粉丝 147原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值