JavaScript中的typeof操作符 类型转换

HTML5学堂:JavaScript是弱变量类型的语言,有些时候我们需要知道变量的数据类型,并且需要进行数据类型的转换,我们通过这篇文章来学习一下如何获取变量的数据类型,以及数字和字符串如何相互转换。

typeof操作符

由于JavaScript是弱数据类型的语言,因此需要有一种方法检测变量的数据类型,这时我们可以用typeof来检测变量的数据类型。例如:

var str = "HTML5学堂";
var num = 111;
var obj = {"name": "HTML5学堂"};
var blank = null;
var a;
var sta = true;
var fun = function(){
    alert("HTML5学堂");
}
console.log(typeof(str));   // "string"
console.log(typeof(num));   // "number" 
console.log(typeof(obj));   // "object"
console.log(typeof(blank)); // "object"
console.log(typeof(a));     // "undefined"
console.log(typeof(sta));   // "boolean"
console.log(typeof(fun));   // "function"

这里需要注意的是,typeof(null)的返回值是object,因为null被认为是一个空的对象引用。

typeof除了上面的写法还有第二种写法,例如:

var a = "HTML5学堂";
console.log(typeof a); // "string"

字符串转换为数字的方法

字符串转换为数字的方法可以分为两种,一个是显式转换,一种是隐式转换。显式转换是通过函数的形式,将字符串转换成数组的形式,隐式转换则是通过运算符的方式将字符串转换成数字的形式。

显式转换

在显式转换中,有三个函数可以把字符串转换为数值:Number()、parseInt()、parseFloat()。Number()可以用于任何数据类型,而另外两个函数则专门用于把字符串转换成数值。

Number()转换规则如下:

如果字符串为数值字符串,则将其转换为十进制数值。

如果字符串中包含有效的十六进制格式,例如"0xf",则将其转换为相同大小的十进制整数值。

如果字符串为空字符串或空格字符串,则将其转换为0。

如果字符串中含有除上述格式以外的字符,则将其转换成NaN。

例如:

console.log(Number(" ")); // 0
console.log(Number("123")); // 123
console.log(Number("HTML5学堂")); // NaN
console.log(Number("0xf")); // 15

parseInt()函数在转换字符串时,更多的是看其是否符合数值模式。它会忽略字符串前面的空格,直至找到第一个非空格字符。如果第一个字符不是数字字符或者负号,parseInt()就会返回NaN,如果是空字符串,则会返回NaN。如果第一个字符是数字字符,parseInt()会继续解析第二个字符,直到解析完所有后续字符或者遇到非数字字符。例如"1234h5course"会被转换成1234,"h5course"会被完全忽略。类似的,"123.4"会被转换成123,因为小数点并不是有效的数字字符。如果字符串中包含有效的十六进制格式,例如"0xf",则将其转换为相同大小的十进制整数值。例如:

console.log(parseInt("")); // NaN
console.log(parseInt("123h5course")); // 123
console.log(parseInt("    123")); // 123
console.log(parseInt("123")); // 123
console.log(parseInt("123.7")); // 123
console.log(parseInt("0xf")); // 15

parseFloat()与parseInt()函数相似,只不过parseInt()返回的是整数,而parseFloat()可以返回小数。parseFloat()转换的时候,也是从第一个字符开始解析每个字符,直到解析到字符串末尾,或者解析到遇见一个无效的浮点数字字符为止,也就是说,字符串中的第一个小数点是有效的,而第二个小数点就是无效的。例如"12.34.56"将会被转换为12.34。如果字符串包含的是一个可解析为整数的数,parseFloat()回返回整数。例如:

console.log(parseFloat("")); // NaN
console.log(parseInt("123.4h5course")); // 123.4
console.log(parseInt("    123")); // 123
console.log(parseInt("123.45")); // 123.45
console.log(parseInt("123.7")); // 123.7
console.log(parseInt("123.75.67")); // 123.75
console.log(parseInt("0xf")); // 15

隐式转换的方式可以通过+、* 1、/ 1的运算来转换成字符串。例如:

var a = "123";
var b = "456";
var c = "789";
a = +a;
b = b * 1;
c = c / 1;
console.log(a); // 123
console.log(b); // 456
console.log(c); // 789

其他类型变量转换为字符串的方法

我们想把其他类型变量转换成字符串,这个时候,我们通常使用toString()方法。几乎每一个值都有toString()方法。例如:

var a = 123;
var bool = true;
console.log(a.toString()); // "123"
console.log(bool.toString()); // "true"

数值、布尔值、对象和字符串都有toString()方法,但null和undefined没有这个方法。我们还可以使用转型函数String(),这个函数能够将任何类型的值转换成字符串。例如:

var obj = null;
console.log(String(obj)); // "null"
var unde = undefined;
console.log(String(unde)); // "undefined"
var a = 123;
console.log(String(a)); // "123"
var bool = true;
console.log(String(bool)); // "true"

原文发布于微信公众号 - HTML5学堂(h5course-com)

原文发表时间:2015-12-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏快乐八哥

JavaScript中的内置对象--Number对象

JavaScript中的内置对象有以下6个: 1.Number对象 2.Boolean对象 3.Data对象 4.Math对象 5.String对象 6.Arr...

2485
来自专栏吾爱乐享

java之学习正则Greedy 数量词的用法

1133
来自专栏coding for love

JS原生引用类型解析4-String类型

(注1:如果有问题欢迎留言探讨,一起学习!转载请注明出处,喜欢可以点个赞哦!) (注2:更多内容请查看我的目录。)

583
来自专栏西安-晁州

js程序设计01——基本概念

本文为js高级程序设计学习笔记,笔记中不乏本人学习js的一些心得demo,喜欢的朋友可以直接参考原书“javascript高级程序设计”,写本笔记的目的是对js...

1810
来自专栏web前端教室

【JS高程】第3章 3.4.5(3)NaN(节选)

NaN,它的全称是 Not a Number,即非数值。用来表示“一个本来要返回数值的操作数,却未返回数值时的情况”。这样就不会报错了嘛。 在ECMAScrip...

3137
来自专栏mwangblog

python字典(Dictionary)

892
来自专栏从零开始学 Web 前端

07 - JavaSE之容器

Collection 接口的子接口分为:Set接口(包含 HashSet类) + List接口(包含LinkedList 类和 ArrayLis t类) Ma...

662
来自专栏進无尽的文章

Swift| 基础语法(二)

总结下 swift下的基础语法,里面涉及到:常量&变量、Swift中的数据类型、逻辑分支、循环、字符串相关、数组和字典、方法的书写调用等内容,考虑到阅读体验分多...

562
来自专栏每日一篇技术文章

Swift3.0 - 属性

633
来自专栏极乐技术社区

使用ES6新特性开发微信小程序(5)——内建对象的变化

Object对象 Object.prototype.proto:对象具有属性proto,可称为隐式原型,一个对象的隐式原型指向构造该对象的构造函数的原型,这也保...

1898

扫描关注云+社区