聊聊js中的typeof

内容:

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); //number
10     console.log(typeof Math.LN2); //number
11     console.log(typeof NaN); // number   尽管NaN是"Not-A-Number"的缩写
12     // Strings
13     console.log(typeof "bla"); // string
14     console.log(typeof ""); // string
15     console.log(typeof(typeof 1)); // string typeof总是返回一个字符串
16     // Booleans
17     console.log(typeof true); //boolean
18     // // Symbols
19     console.log(typeof Symbol()); //symbol
20     console.log(typeof Symbol(‘foo‘)); //symbol
21     // Undefined
22     console.log(typeof undefined); //undefined
23     // Objects
24     console.log(typeof { a: 1 }); //object
25     console.log(typeof null);     //object 从一开始出现JavaScript就是这样的
26     // 使用Array.isArray 或者 Object.prototype.toString.call
27     // 区分数组,普通对象
28     console.log(typeof [1, 2, 4]);           //object
29     console.log(typeof new Date());          //object
30     // 下面的容易令人迷惑,不要使用!
31     console.log(typeof new Boolean(true));   //object
32     console.log(typeof new Number(1));       //object
33     console.log(typeof new String("abc"));   //object
34     // 函数
35     console.log(typeof function() {});     //function
36     console.log(typeof class C {});        //function
37     console.log(typeof new Function());    //function
38     </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 - null
var 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();    //会引发错误

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

时间: 2024-11-05 22:42:48

聊聊js中的typeof的相关文章

浅谈JS中的typeof和instanceof的区别

JS中的typeof和instanceof常用来判断一个变量是否为空,或者是什么类型. typeof typeof运算符返回一个用来表示表达式的数据类型的字符串. typeof一般返回以下几个字符串: "number", "string","boolean","object","function","undefined" 对于Array,Null等特殊对象使用typeof一律返回obje

咱们来聊聊JS中的异步,以及如何异步,菜鸟版

为什么需要异步?why?来看一段代码. 问题1: for(var i=0;i<100000;i++){ } alert('hello world!!!'); 这段代码的意思是执行100...次后再执行alert,这样带来的问题是,严重堵塞了后面代码的执行,至于为什么,主要是因为JS是单线程的. 问题2: 我们通常要解决这样一个问题,如果我们需要在head里面加入script代码的话,一般会将代码写在window.onload里面(如果操作了dom的话),你有没有想过,为什么要加window.on

js中的typeof

typeof的几种返回结果的分类: 转自:http://www.360doc.com/content/14/0718/15/8790037_395279403.shtml typeof运算符介 绍:typeof 是一个一元运算,放在一个运算数之前,运算数可以是任意类型.它返回值是一个字符串,该字符串说明运算数的类型. 你 知道下面typeof运算的结果吗? typeof(1);typeof(NaN);typeof(Number.MIN_VALUE);typeof(Infinity);typeof

javascript js中的typeof使用

typeof运算符介 绍:typeof 是一个一元运算,放在一个运算数之前,运算数可以是任意类型.它返回值是一个字符串,该字符串说明运算数的类型. 你 知道下面typeof运算的结果吗? typeof(1);typeof(NaN);typeof(Number.MIN_VALUE);typeof(Infinity);typeof("123");typeof(true);typeof(window);typeof(document);typeof(null);typeof(eval);ty

js中的typeof和instanceof和===

typeof: 用于判断number/string/boolean/underfined类型/function 不能判断:null和object ,不能区分object和Array instanceof: 判断具体的对象类型 ===: 用于判断undefined和null //五种基本类型 var num=1; var str="abc"; var bl=true; var nu=null; var undef=undefined; //三种特殊类型 var obj=new Objec

js中对 typeof 以及 instanceof 的使用及理解

F&Q: Q1:instanceof 和 typeof 是什么? 用于判断数据类型. Q2:它们能做什么? 根据数据类型判断进行一些逻辑编码.如:当判断出该参数类型为 number 则转换成 String 放入数组. Q3:为什么说 typeof 一般用于基本类型  instanceof 一般用于引用类型? 因为便利. 引用类型如果用typeof则会显示object类型,而这样区分不了这个参数是对象还是数组还是其他的引用类型.如果用instanceof则可以轻松区分. 而基本类型用instanc

js中的typeof和instanceof的区别

1.typeof以字符串的形式返回类型,具体有6种类型:number,boolean,string,function,object,undefined typeof(1): number typeof(NaN): number typeof(Number.MIN_VALUE): number typeof(Infinity): number typeof("123"): string typeof(true): boolean typeof(window): object typeof

js中typeof和instanceof用法区别

typeof和instanceof的区别 typeof和instanceof都可以用来判断变量,它们的用法有很大区别: typeof会返回一个变量的基本类型,只有以下几种:number,boolean,string,object,undefined,function:例: alert(typeof(1));//number alert(typeof("abc"));//string alert(typeof(true));//boolean alert(typeof(m));//und

JS中typeof和instanceof的区别

01==> 浅谈JS中的typeof和instanceof的区别 // JS中的typeof和instanceof常用来变量是什么类型. // typeof一般返回以下几个字符串: // String Boolean","Number" "object","function","undefined" // 对于Array,Null等特殊对象使用typeof一律返回object,这正是typeof的局限性. 有些