JS类型转换(含判断数据类型)

复习类型转换前要先复习怎么判断数据是什么类型呢?

1.JS数据类型

JavaScript 中有五种可包含值的数据类型:
●字符串(string)
●数字(number)
●布尔(boolean)
●对象(object)
●函数(function)

有三种对象类型:
●对象(Object)
●日期(Date)
●数组(Array)

同时有两种不能包含值的数据类型:
●null
●undefined

2.typeof 运算符

用来确定 JavaScript 变量的数据类型。
typeof 运算符不是变量。它属于运算符。运算符(比如 + - * /)没有数据类型。
但是,typeof 始终会返回字符串(包含运算数的类型)。

通过typeof +数据 得出以下结果:

数据类型
字符串string
数字number
NaNnumber
true/falseboolean
对象object
数组object
日期object
nullobject
函数function
undefinedundefined
未定义变量undefined
尚未赋值的变量undefined

所以,无法使用 typeof 去判断 JavaScript 对象是否是数组(或日期)。

3.constructor 属性

constructor 属性返回所有 JavaScript 变量的构造器函数。

"Bill".constructor                 // 返回 "function String()  { [native code] }"
(3.14).constructor                 // 返回 "function Number()  { [native code] }"
false.constructor                  // 返回 "function Boolean() { [native code] }"
[1,2,3,4].constructor              // 返回 "function Array()   { [native code] }"
{name:'Bill', age:62}.constructor  // 返回" function Object()  { [native code] }"
new Date().constructor             // 返回 "function Date()    { [native code] }"
function () {}.constructor         // 返回 "function Function(){ [native code] }"

可以通过检查 constructor 属性来确定某个对象是否为数组(包含单词 “Array”):

function isArray(myArray) {
    return myArray.constructor.toString().indexOf("Array") > -1;
}

或者,可以检查对象是否是数组函数

function isArray(myArray) {
    return myArray.constructor === Array;
}

同样地,对于日期

function isDate(myDate) {
    return myDate.constructor.toString().indexOf("Date") > -1;
}

或者,可以检查对象是否是日期函数

function isDate(myDate) {
    return myDate.constructor === Date;
}

复习完了怎么判断JS数据类型,那么可以复习转换了。

4.JavaScript 类型转换

JavaScript 变量能够被转换为新变量以及另一种数据类型:
●通过使用 JavaScript 函数
●通过 JavaScript 本身自动转换

(1)把数值转换为字符串 num->string

方法描述
(全局) String()把任意类型的数字、文字、变量或表达式转换为字符串
toString()把任意类型的数字、文字、变量或表达式转换为字符串
toExponential()返回字符串值,它包含已被四舍五入并使用指数计数法的数字。
toFixed()返回字符串值,它包含了指定位数小数的数字
toPrecision()返回字符串值,它包含了指定长度的数字

●把字符串转换为数值 string->num

方法描述
(全局)Number()返回数字,由其参数转换而来。
parseFloat()解析其参数并返回浮点数。
parseInt()解析其参数并返回整数。

如果无法转换为数值,则返回 NaN (Not a Number)。

一元 + 运算符
一元的 + 运算符可用于把变量转换为数字

var y = "5";      // y 是字符串
var x = + y;      // x 是数字

如果无法转换变量,则仍会成为数字,但是值为 NaN(Not a number):

var y = "Bill";   // y 是字符串
var x = + y;      // x 是数字 (NaN)

(2)把布尔转换为字符串 bool->string
全局方法 String() 能够将布尔转换为字符串。
布尔方法 toString() 同理。

●把字符串转换为布尔 string->bool
全局方法Boolean()能够将字符串转换为布尔。

(3)把日期转换为字符串 date->string

方法描述
(全局) String()把任意类型的数字、文字、变量或表达式转换为字符串
toString()把任意类型的数字、文字、变量或表达式转换为字符串
getDate()获得以数值计(1-31)的日
getDay()或者以数值计(0-6)的周
getFullYear()获得四位的年(yyyy)
getHours()获得时(0-23)
getMilliseconds()获得毫秒(0-999)
getMinutes()获得分钟(0-59)
getMonth()获得月(0-11)
getSeconds()获得秒(0-59)
getTime()获得时间(1970 年 1 月 1 日以来的毫秒)

●把字符串转换成日期 string->date
全局方法 Date() 能够将字符串转换为日期。
具体看JS复习(中)日期的格式化

(4)把布尔转换数值 bool->num
全局方法 Number() 可把布尔转换为数字。

Number(false)     // 返回 0
Number(true)      // 返回 1

●把数值转换布尔 num->bool
全局方法 Boolean() 可把数值转换为布尔。
只有Boolean(0)Boolean(NaN)返回false,其他数字都是true

(5)把日期转换为数字 date->num
全局方法 Number()可用于把日期转换为数字,返回毫秒数。
日期方法 getTime() 同理,返回自 1970 年 1 月 1 日以来的毫秒数。

●把数字转换为日期 num->date
全局方法Date()可用于把“整数”数值(毫秒数)转换为日期。

(6)自动类型转换
如果 JavaScript 尝试操作一种“错误”的数据类型,它会试图将该值转换为“正确”的类型。

结果并不总是我们所期望的:

5 + null    // 返回 5         因为 null 被转换为 0
"5" + null  // 返回 "5null"   因为 null 被转换为  "null"
"5" + 2     // 返回 52        因为 2 被转换为 "2"
"5" - 2     // 返回 3         因为 "5" 被转换为 5
"5" * "2"   // 返回 10        因为 "5" 和 "2" 被转换为 5 和 2

(7)自动字符串转换
JavaScript 自动调用变量的 toString() 函数,当我们试图“输出”对象或变量时:

document.getElementById("demo").innerHTML = myVar;

// 如果 myVar = {name:"Fjohn"}  
 toString 转换为 "[object Object]"
 
// 如果 myVar = [1,2,3,4]     
toString 转换为 "1,2,3,4"

// 如果 myVar = new Date()  
toString 转换为 "Sun Sep 22 2019 15:28:19 GMT+0800 (中国标准时间)"

数字和布尔也会被转换,但并不明显:

// 如果 myVar = 123           
 toString 转换为 "123"
 
// 如果 myVar = true          
toString 转换为 "true"

// 如果 myVar = false          
 toString 转换为 "false

(8)JavaScript 类型转换表
下表中列出了将不同 JavaScript 值转换为数字、字符串和布尔的结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值