分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

聊聊js中的typeof

发布时间:2023-09-06 01:32责任编辑:彭小芳关键词:js

内容:

1.typeof

2.值类型和引用类型

3.强制类型转换

typeof

官方文档:typeof

1.作用:

操作符返回一个字符串,指示未经计算的操作数的类型。

2.语法:

          typeof operand

参数:operand 是一个表达式,表示对象或原始值,其类型将被返回。

3.返回值:

类型结果
Undefined"undefined"
Null"object"(见下文)
Boolean"boolean"
Number"number"
String"string"
Symbol (ECMAScript 6 新增)"symbol"
宿主对象(由JS环境提供)Implementation-dependent
函数对象([[Call]] 在ECMA-262条款中实现了)"function"
任何其他对象"object"

4.示例:

 1 <!DOCTYPE html> 2 <html> 3 ?4 <head> 5 ????<meta charset="utf-8"> 6 ????<title>typeof返回值有哪些类型</title> 7 ????<script type="text/javascript"> 8 ????// Numbers 9 ????console.log(typeof 37); //number10 ????console.log(typeof Math.LN2); //number11 ????console.log(typeof NaN); // number ??尽管NaN是"Not-A-Number"的缩写12 ????// Strings13 ????console.log(typeof "bla"); // string14 ????console.log(typeof ""); // string15 ????console.log(typeof(typeof 1)); // string typeof总是返回一个字符串16 ????// Booleans17 ????console.log(typeof true); //boolean18 ????// // Symbols19 ????console.log(typeof Symbol()); //symbol20 ????console.log(typeof Symbol(‘foo‘)); //symbol21 ????// Undefined22 ????console.log(typeof undefined); //undefined23 ????// Objects24 ????console.log(typeof { a: 1 }); //object25 ????console.log(typeof null); ????//object 从一开始出现JavaScript就是这样的26 ????// 使用Array.isArray 或者 Object.prototype.toString.call27 ????// 区分数组,普通对象28 ????console.log(typeof [1, 2, 4]); ??????????//object29 ????console.log(typeof new Date()); ?????????//object30 ????// 下面的容易令人迷惑,不要使用!31 ????console.log(typeof new Boolean(true)); ??//object32 ????console.log(typeof new Number(1)); ??????//object33 ????console.log(typeof new String("abc")); ??//object34 ????// 函数35 ????console.log(typeof function() {}); ????//function36 ????console.log(typeof class C {}); ???????//function37 ????console.log(typeof new Function()); ???//function38 ????</script>39 </head>40 41 <body>42 </body>43 44 </html>

从上面的示例得出:

js中使用typeof能得到的类型有:undefined、string、number、boolean、object、function。

typeof只能区分值类型的详细类型,而对于引用类型就不行了。

看完typeof我们顺便来聊聊值类型和引用类型:

数据类型值/引用类型
undefined基本类型
null基本类型
number基本类型
boolean基本类型
string基本类型
function引用类型
object引用类型

1.示例:

 ???var a=1,b=a; ???a=2; ???console.log(‘a:‘+a);//a:2 ???console.log(‘b:‘+b);//b:1 ???//上面,b获取值是a值的一份拷贝,虽然,两个变量的值是相等,但是两个变量保存两不同的基本数据类型值。b只是保存了a复制的一个副本。所以,当a的值改变时,b的值依然是1; ???var a={‘age‘:20},b=a; ???a.age=22; ???console.log(‘a:‘+JSON.stringify(a));//a:{"age":22} ???console.log(‘b:‘+JSON.stringify(b));//b:{"age":22} ???b.age=11; ???console.log(‘a:‘+JSON.stringify(a));//a:{"age":11} ???console.log(‘b:‘+JSON.stringify(b));//b:{"age":11} ???// 我们声明了一个引用数据类型变量a,并把它赋值给了另外一个引用数据类型变量b。当我们任意改变a、b其中一个的age属性值时,a、b的age属性都会发生变化。说明这两个引用数据类型变量指向同一个堆内存对象。a赋值给b,实际只是把这个堆内存对象在栈内存的引用地址复制了一份给了b,但它们本质上共同指向了同一个堆内存对象。

顺带说说强制类型转换

1.字符串拼接

 ???var a=100+10; ???console.log(a); //110 ???var b=100+‘10‘; ???console.log(b);//10010

2.==运算符

 ???console.log(100==‘100‘);//true ???console.log(0==‘‘);//true ???console.log(null==undefined);//true

3.if语句

 ???var c=true; ???if(c){ ???????console.log(‘is true‘);//执行 ???}else { ???????console.log(‘is false‘); ???} ???var d=100; ???if(d){ ???????console.log(‘is true‘);//执行 ???}else { ???????console.log(‘is false‘); ???} ???var d=‘‘; ???if(d){ ???????console.log(‘is true‘); ???}else { ???????console.log(‘is false‘);//执行 ???}

4.逻辑运算

 ???console.log(10&&0);//0 ???console.log(‘‘||‘ab‘);//‘ab‘ ???console.log(!window.abc);//true ?window.abc ?undefined ?取反则为true ???//判断一个变量是 true还是false可以给其前面加 ?!! ???var a=100; ???console.log(!!a);//true 

以下内容来此:ECMAScript 类型转换

5.Boolean() 函数

当要转换的值是至少有一个字符的字符串、非 0 数字或对象时,Boolean() 函数将返回 true。如果该值是空字符串、数字 0、undefined 或 null,它将返回 false。

var b1 = Boolean(""); ???????//false - 空字符串var b2 = Boolean("hello"); ???????//true - 非空字符串var b1 = Boolean(50); ???????//true - 非零数字var b1 = Boolean(null); ???????//false - nullvar b1 = Boolean(0); ???????//false - 零var b1 = Boolean(new object()); ???//true - 对象

6.Number() 函数

Number() 函数的强制类型转换与 parseInt() 和 parseFloat() 方法的处理方式相似,只是它转换的是整个值,而不是部分值。

还记得吗,parseInt() 和 parseFloat() 方法只转换第一个无效字符之前的字符串,因此 "1.2.3" 将分别被转换为 "1" 和 "1.2"。

用 Number() 进行强制类型转换,"1.2.3" 将返回 NaN,因为整个字符串值不能转换成数字。如果字符串值能被完整地转换,Number() 将判断是调用 parseInt() 方法还是 parseFloat() 方法。

下表说明了对不同的值调用 Number() 方法会发生的情况:

用法结果
Number(false)0
Number(true)1
Number(undefined)NaN
Number(null)0
Number("1.2")1.2
Number("12")12
Number("1.2.3")NaN
Number(new object())NaN
Number(50)50

7.String() 函数

最后一种强制类型转换方法 String() 是最简单的,因为它可把任何值转换成字符串。

要执行这种强制类型转换,只需要调用作为参数传递进来的值的 toString() 方法,即把 12 转换成 "12",把 true 转换成 "true",把 false 转换成 "false",以此类推。

强制转换成字符串和调用 toString() 方法的唯一不同之处在于,对 null 和 undefined 值强制类型转换可以生成字符串而不引发错误:

var s1 = String(null); ???//"null"var oNull = null;var s2 = oNull.toString(); ???//会引发错误

聊聊js中的typeof

原文地址:https://www.cnblogs.com/yingzi1028/p/8119614.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved