你未注意的typeof操作符

刻舟求剑
• 阅读 1773

typeof可能返回下列某个字符串

  1. "undefined" -- 如果这个值未定义
  2. "boolean" -- 如果这个值是布尔值
  3. "string" -- 如果这个值是字符串
  4. "number" -- 如果这个值是数值
  5. "object" -- 如果这个值是对象或者null
  6. "function" -- 如果这个值是函数

需要注意的几种情况

  1. typeof Infinity === 'number';
  2. typeof NaN === 'number'; // 尽管NaN是"Not-A-Number"的缩写
  3. typeof (typeof 1) === 'string'; // typeof总是返回一个字符串
  4. typeof undefined === 'undefined';
  5. typeof declaredButUndefinedVariable === 'undefined';
  6. typeof undeclaredVariable === 'undefined';

区分数组,普通对象

  1. typeof [1, 2, 4] === 'object';
  2. typeof class C{} === 'function'
  3. typeof Math.sin === 'function';
  4. typeof null === 'object'; // 从一开始出现JavaScript就是这样的

typeof为number举例

  1. typeof 37 === 'number';
  2. typeof 3.14 === 'number';
  3. typeof Math.LN2 === 'number';
  4. typeof Infinity === 'number';
  5. typeof NaN === 'number';
  6. typeof Number(1) === 'number'; // 不要使用这种形式!

typeof为string举例

  1. typeof "" === 'string';
  2. typeof "bla" === 'string';
  3. typeof (typeof 1) === 'string'; // typeof总是返回一个字符串
  4. typeof String("abc") === 'string'; // 不要使用这种形式!

typeof为Booleans举例

  1. typeof true === 'boolean';
  2. typeof false === 'boolean';
  3. typeof Boolean(true) === 'boolean'; // 不要使用这种形式!

typeof为Symbols举例

  1. typeof Symbol() === 'symbol';
  2. typeof Symbol('foo') === 'symbol';
  3. typeof Symbol.iterator === 'symbol';

typeof为Undefined举例

  1. typeof undefined === 'undefined';
  2. typeof declaredButUndefinedVariable === 'undefined';
  3. typeof undeclaredVariable === 'undefined';

typeof为Objects举例

  1. typeof {a:1} === 'object';
  2. typeof [1, 2, 4] === 'object';
  3. typeof new Date() === 'object';
  4. typeof null === 'object';

typeof为function举例

  1. typeof function(){} === 'function';
  2. typeof class C{} === 'function'
  3. typeof Math.sin === 'function';
  4. typeof new Function() === 'function';

建议不要使用的

  1. typeof new Boolean(true) === 'object';
  2. typeof new Number(1) === 'object';
  3. typeof new String("abc") === 'object';

参考文档:MDN-typeof操作符

点赞
收藏
评论区
推荐文章
Karen110 Karen110
3年前
一篇文章带你了解JavaScript Object 对象
一、概念JavaScript原生提供Object对象(注意起首的O是大写),介绍该对象原生的各种方法。JavaScript的所有其他对象都继承自Object对象,即那些对象都是Object的实例。二、Object()Object本身是一个函数,可以当作工具方法使用,将任意值转为对象。这个方法常用于保证某个值一定是对象。如果参数为空(或者为undefi
Souleigh ✨ Souleigh ✨
4年前
JS - typeof 与 instanceof
一、typeoftypeof操作符返回一个字符串,表示未经计算的操作数的类型使用方法如下:typeof operandtypeof(operand)operand表示对象或原始值的表达式,其类型将被返回举个例子typeof 1 // 'number'typeof '1' // 'string'
LinMeng LinMeng
4年前
html5的input类型(type)和所有属性详解
先总结input的所有属性required:标记一个字段是否为必须。如果一个字段被标记为required"required"(严格模式下),或者required(宽松模式下)并且这个字段的值为空,或者填入的值是无效值,那么这个表单不能提交。什么是无效值?看pattern属性pattern:该属性包含了一个JavaScript风格的正则表达式,输
明月 明月
2年前
JS数据类型的几种判断方法
1.typeof(常用)typeof是一个运算符,返回值是一个字符串,用来说明变量的数据类型,可以用来判断number,string,object,boolean,function,undefined,symbol这七种类型.2.instanceof(知道即可)instanceof运算符用于检测构造函数的prototype属性是否出现在某个实例对象的原型链上,返回值为布尔值,用于指示一个变量是否属于某个对象的实例3.Object.prototype.to
阿邹 阿邹
4年前
java传值和传引用问题
这个问题还是很常见的,如果你平常敲代码比较多你可能经常会遇到这个问题。如果你知道java这个机制,你可能还会一直在找代码的问题。java中的值传递和引用传递。比如下面有这俩个方法javaprivatevoidupdataValue(Strings){s"123";}privatevoidupd
Stella981 Stella981
3年前
CodeIgniter pdo与postgres原生驱动对bool类型取值是不同的
CI版本2.1.3,对于返回bool类型值,比如SELECTFALSE如果用的是pdo驱动,那么取值结果也是bool类型。如果是postgres驱动,那么得到的是'f'字符串。这个问题是PHP自己的问题:在老版本的pdo驱动发生过(好像是php5.1之前版本),现在的pdo已经修正。但postgres驱动看来没得到处理。以下是ph
Wesley13 Wesley13
3年前
Java学习笔记7
lock接口实现类ReentrantLock我们可以用lock对象,来对临界资源加锁,只有获得lock对象才能访问临界资源,如果没有获得lock对象,就会进入lock对象的锁池。trylock()方法会返回布尔值,这个方法是用来判断这个锁对象是不是已经被线程获取,如果返回值为true,则会直接获得这个锁对象,如果返回false,线程不会阻塞还会继
Wesley13 Wesley13
3年前
mysql函数大全
对于针对字符串位置的操作,第一个位置被标记为1。ASCII(str)返回字符串str的最左面字符的ASCII代码值。如果str是空字符串,返回0。如果str是NULL,返回NULL。mysqlselectASCII('2');  50mysqlselectASCII(2);  50mysqls
Wesley13 Wesley13
3年前
MySQL清空表漏洞!
MySQL有一个特点,当某个字段是字符串时,如果你的sql传数字它会尝试把这一列所有值转换成数字进行匹配,如果不是数字则会转换为0.创建表test,并插入测试数据CREATETABLEtest(idvarchar(10)NOTNULL,PRIMARYKEY(id));
Stella981 Stella981
3年前
Golang学习
//将布尔值转换为字符串true或falsefuncFormatBool(bbool)string//将字符串转换为布尔值//它接受真值:1,t,T,TRUE,true,True//它接受假值:0,f,F,FALSE,false,False//其它任何值都返回一个错误。funcParseBool(st
Wesley13 Wesley13
3年前
ES6基础之——判断字符串里是否包含其他字符串
在ES6里面添加了一些字符串的方法:includes()、startsWith()、endsWith(),他们可以很方便的判断字符串里是否包含其他字符串;includes():是否包含了参数字符串,返回布尔值startsWith():参数字符串是否在原字符串的头部,返回布尔值endsWith():参数字符串是否在原字符串的尾部,返回布尔值例子
刻舟求剑
刻舟求剑
Lv1
时间很快就过去了,之后才想到自己还有没有完成的事情
文章
2
粉丝
0
获赞
0
热门文章