内容:

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.示例:

 <!DOCTYPE html>
<html> <head>
<meta charset="utf-8">
<title>typeof返回值有哪些类型</title>
<script type="text/javascript">
// Numbers
console.log(typeof 37); //number
console.log(typeof Math.LN2); //number
console.log(typeof NaN); // number 尽管NaN是"Not-A-Number"的缩写
// Strings
console.log(typeof "bla"); // string
console.log(typeof ""); // string
console.log(typeof(typeof 1)); // string typeof总是返回一个字符串
// Booleans
console.log(typeof true); //boolean
// // Symbols
console.log(typeof Symbol()); //symbol
console.log(typeof Symbol('foo')); //symbol
// Undefined
console.log(typeof undefined); //undefined
// Objects
console.log(typeof { a: 1 }); //object
console.log(typeof null); //object 从一开始出现JavaScript就是这样的
// 使用Array.isArray 或者 Object.prototype.toString.call
// 区分数组,普通对象
console.log(typeof [1, 2, 4]); //object
console.log(typeof new Date()); //object
// 下面的容易令人迷惑,不要使用!
console.log(typeof new Boolean(true)); //object
console.log(typeof new Number(1)); //object
console.log(typeof new String("abc")); //object
// 函数
console.log(typeof function() {}); //function
console.log(typeof class C {}); //function
console.log(typeof new Function()); //function
</script>
</head> <body>
</body> </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,但它们本质上共同指向了同一个堆内存对象。

学习:JavaScript 是传值调用还是传引用调用?

顺带说说强制类型转换

1.字符串拼接

    var a=100+10;
console.log(a); //
var b=100+'10';
console.log(b);//

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);//
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(); //会引发错误

聊聊js中的typeof的更多相关文章

  1. Ext JS中的typeOf

    Ext JS中的typeOf:以字符串格式,返回给定变量的类型 其中对字符串对象.元素节点.文本节点.空白文本节点判断并不准确 测试代码如下: <!DOCTYPE HTML PUBLIC &qu ...

  2. 浅谈JS中的typeof和instanceof的区别

    JS中的typeof和instanceof常用来判断一个变量是否为空,或者是什么类型. typeof typeof运算符返回一个用来表示表达式的数据类型的字符串. typeof一般返回以下几个字符串: ...

  3. js中的typeof name

    js中的name 使用typeof name得到  string.. 因为name是全局变量,可以在任意浏览器中使用 . cosole.dir(window)查看.. console.log(type ...

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

    为什么需要异步?why?来看一段代码. 问题1: for(var i=0;i<100000;i++){ } alert('hello world!!!'); 这段代码的意思是执行100...次后 ...

  5. 一文搞懂js中的typeof用法

    基础 typeof 运算符是 javascript 的基础知识点,尽管它存在一定的局限性(见下文),但在前端js的实际编码过程中,仍然是使用比较多的类型判断方式. 因此,掌握该运算符的特点,对于写出好 ...

  6. javascript js中的typeof使用

    typeof运算符介 绍:typeof 是一个一元运算,放在一个运算数之前,运算数可以是任意类型.它返回值是一个字符串,该字符串说明运算数的类型. 你 知道下面typeof运算的结果吗? typeof ...

  7. js中的typeof

    typeof的几种返回结果的分类: 转自:http://www.360doc.com/content/14/0718/15/8790037_395279403.shtml typeof运算符介 绍:t ...

  8. js 中使用typeof

    >typeof(null) <"object" 对null执行typeof预算,结果返回字符串'object',也就是说,可以将null认为是一个特殊的对象值,含义是“ ...

  9. js中的typeof和instanceof和===

    typeof: 用于判断number/string/boolean/underfined类型/function 不能判断:null和object ,不能区分object和Array instanceo ...

随机推荐

  1. Dev控件 galleryControl

    发现一个规律,不会的控件先拖到界面上,右上角需要add 的就对应add一个.然后就是找属性和集合手动添加几个. 然后把XXXForm.Designer.cs 里面的代码提取到逻辑代码中,就把常量换成变 ...

  2. Dev控件treeList

    之前做过一段时间,当时copy 的别人的代码,这就就把节点给添加了,上次帮同事做也发现了这个问题,当时没有记下来,今天有做,磨了半天,记下来吧. Dev控件treeList 要添加节点第一步是右键添加 ...

  3. C#的XML文件的读取与写入

    在设计程序的时候,对于一些变化性较强的数据,可以保存在XML文件中,以方便用户修改.尤其是对于一些软硬件的配置文件,很多都选择了用XML文件来存取.XML文件简单易用,而且可以在任何应用程序中读写数据 ...

  4. pattern

    A compiled representation of a regular expression. A regular expression, specified as a string, must ...

  5. FPGA时钟分频(转)

    http://www.cnblogs.com/fpga/archive/2009/10/24/1589318.html 占空比为50%的分频 偶数分频比较简单 比如N分频,那么计数到N/2-1,然后时 ...

  6. PHP Xdebug安装及配置

    1.首先在官方网站下载dll文件; Xdebug官方网站 2.将php_xdebug.dll文件放入php/ext文件夹下; 3.编辑php.ini,在文件最后加入如下代码: ; Xdebug zen ...

  7. 容易被忽视的后端服务 chunked 性能问题

    容易被忽视的后端服务 chunked 性能问题 标签(空格分隔): springboot springmvc chunked 背景 spring boot 创建的默认 spring mvc 项目 集成 ...

  8. 在本地搭建play-with-docker

    安装play-with-docker 官方Github地址 https://github.com/play-with-docker/play-with-docker 本人Github地址 https: ...

  9. Delphi 7中对StretchBlt, StretchDIBits, DrawDibDraw, BitBlt 的性能测试 - 原创

    我的天哪,上一篇博文是2年前的事情了.看来又虚度了2年光阴,继续学习... 本文算是副产品,正品是利用FFmpeg从任意视频中生成GIF片段的小程序,等写完了再发.不为别的,只是为了给儿子做动图,且看 ...

  10. 2016第七届 蓝桥杯 全国总决赛B题(完全平方数) (练习)

    道友给看了一道题目,就记录一下吧 题目: 给你0,1,2,3,4,5,6,7,8,9十个数字,要你选出任意一个或几个组合在一起成为完全平方数,每个数字都必须选且只能选一次,求可能的方案. 比如有其中几 ...