JS 里的数据类型转换

本文章为知乎搬运,非原创,原文链接地址:https://zhuanlan.zhihu.com/p/73190204

目录:
1.了解一些词语
2.数据的类型
3.类型之间的转换

1.了解一些词语

首先!

你现在处在某个空间,四周一片空白啥也没有,你特别饿,很想吃东西。突然眼前出现一行字:【需要什么东西你就 var 一下】

虽然这行提示说的并不详细,但机智的你立马就知道怎么用了。

(英语瞎组合的,两辆车的肉)

var food = 2 + ‘cars of meat’;

这里有几个词:

【值】(value):比如数字1就是一个值,数字被称为数值(number),数值1和数值2加起来是数值3。但是如果把数字1用引号包围起来,比如这样 ‘1’,他就从数值1变成了字符串(string)‘1’,字符串‘1’和字符串’2’相加时和数值之间的相加不一样,这两个字符串相加会变成’12’,因为他们不是数字,他们相当是两个只读的文字,只能把他们的内容连接起来。

【变量】(variable):上面绿色框中的food就是一个变量,从变量中的变字可以看出来,他是可变的,哪里可变?你可以把food当成一个桶,你可以往这个桶里装东西,你第一次往里面装了两车肉,你过了一秒觉得不好,太浪费了,把两车肉从桶里拿出来,装了一盒冰淇淋进去。里面装的东西可变就是变量,和变量相反的是常量,如果你用常量装这两车肉,那就算肉馊了也只能放桶里捂着。(food是这个变量的变量名,你还可以给这个变量取其他你喜欢的名字。)

【赋值运算符】(Assignment Operators):它的作用是把[值]赋给[变量],就是把那两车肉放到桶里的作用。

【语句】(statement):JavaScript执行代码时是按照顺序一行一行往下执行(忽略变量提升函数提升等情况),一行代码就是一个语句。【语句】的作用是为了完成某种任务的操作,比如上面那行语句,它的任务就是把橙色框内的内容赋值给前面绿色框里的food变量。

【表达式】(expression):上面那行代码中橙色框内的内容就是表达式,他的作用是为了返回一个值,比如1+1返回2这个值,而像语句就不用返回一个值,语句是为了执行某个操作,比如把表达式返回的2这个值赋值给某个变量。

【var】:var 主要用来声明一个变量,比如你所在的那个空间没有一个叫food的桶,但是你想要一个叫food的桶,于是在第一次创建这个桶的时候,需要用var来创建它,后面如果你需要更改这个food里的值的话,就不用了var了,因为我们只有在创建变量的时候才用它。

2. 数据的类型

这里数据的类型指的就是【值】(value)的类型。JavaScript在声明变量的时候,用var声明的变量,值可以是任 意 类 型,字符串,布尔值,数值,对象,数组等等都可以。

而在其他编程语言中,你想声明一个变量,可能需要根据【值】的类型的不同,用不同的方式去声明,比如值是整数,就用int,如果是浮点数,就用float。所以JavaScript在这点来说还是比较方便的。

在JavaScript中,值一共有几种类型?

答案:7种

数值 number(如【值】为整数1,小数1.3,科学计数法12e2等表现形式) 字符串 string(如’hi’) null
undefined symbol (ES6新增内容,等我了解了再补) 对象 object 对象又可以分为三个子类型:

  • 狭义的对象 object

  • 数组 array

  • 函数 function

布尔值 boolean (布尔值分为true和false)

数值:

值就是平时用的数字,可以用来加减乘除,比如上面的变量minus右边的表达式用的是3-1这个计算式,计算结果是2,返回的数值2赋值给变量minus,输入minus,果然返回的值就是数值2.

字符串:

当你需要给变量赋值一个字符串的时候,就需要把值用双引号包围起来,双引号,单引号都可以。

变量a的值是一个数值,变量b的值是一个字符串,一个数值和一个字符串相加的结果是数值会被自动转换成字符串,最终将两个字符串的内容连接起来。

【加减乘除】四则运算中,当一个数值和一个字符串进行运算时,除了加号会把数值自动转换成字符串,其他的乘法,除法,减法,都会把字符串自动转化成数值。

【空字符串】和【空格字符串】:

空字符串是引号里面什么都没有

空格字符串是引号里面有一个空格

(length用来返回该变量的长度,比如一个变量的值是’hi’,这个字符串就俩字符,h 和i,所以它的length是2。

a.length返回的值是0,代表变量a里面的字符串长度是0,啥也没有;

b.length返回的值是1,是因为b是一个空格字符串,里面有一个空格,空格也能被浏览器发现的!所以空字符串和空格字符串是有区别的)

null 和 undefined:

null 和 undefined 都可以表示‘没有’,含义虽然非常相似,但实际还是有些区别。

像在其他编程语言中,只有null或者只有undefined,为什么在JavaScript中既有null又有undefined呢!真的很令人头大啊!

其实JavaScript最开始和java一样,也是只有null的。null有一个特点,会自动变成0和数字进行运算

当时已经有了null,为了想明白为什么JavaScript的设计者还要额外设置一个undefined,我们可以先用typeof这个专门用来检测值是什么类型的函数看一下null本身是什么类型(正常来说,数字1的类型是number,'1’的类型是字符串,null的类型应该也是null吧!)。

调用typeof函数,把null这个值放进括号里,返回的结果告诉了我们刚刚传入的值是什么类型。

null的类型居然不是null,而是对象(object)!最开始的时候,JavaScript设计者Brendan Eich最初并没有把null设为一个单独的类型,null是被归类为对象这个类型中的,他认为,表示‘无’的这个值最好不要是对象,所以作为对象的null被他无视掉了,于是就有了undefined这个东西。

用法:

null:

表示【空值】,就是说,这个地方的值为空。比如调用函数的时候,如果某个参数没有设置任何值,这个时候就可以传入【null】,表示这个参数为空。

或者如某个函数接受引擎传入的错误作为参数,如果运行的时候没有发生任何错误,那么这个参数就会传入【null】,表示没有发生错误。

undefined:

表示‘未定义’的原始值,当我们声明了一个变量后,可以先不用赋值给变量,这时候未赋值的变量他此刻的值就是undefined

布尔值:

只有【true】 【false】 两个值

true是真,false是假。true和false经常用于if语句,比如:

第一步蓝色框:声明一个变量,变量名是【我机智吗】,值为【机智】

第二步橙色框:用if语句做判断,两个等于号是相等运算符,判断两边值是否相等,结果会返回布尔值true 或者 false。如果这个变量的值是【机智】,返回的就是true,代表是真的,是对的,就会执行花括号里面的代码(中间console.log的作用是向控制台输出括号里的内容),如果不是,就不执行

第三步绿色框:执行了花括号里的语句,代表那句判断为true!

下列运算符会返回布尔值:

  • 两元逻辑运算符: && ||

  • 前置逻辑运算符: !(Not)

  • 相等运算符: === !== == !=

  • 比较运算符: > >= < <=

以下六个值默认会被转为false,其他为true:

  • undefined

  • null

  • false

  • 0

  • NaN

  • " " 或 ’ ’ (空字符串)

例:

if 命令后面是一个布尔值,JavaScript自动将NaN转为布尔值false,导致程序不会进入代码块,也就是不会执行代码里的命令了,所以不会有任何输出。

NaN:not a number,意思是【不是数字】。7种数据类型中有null和undefined,null在和数值进行运算的时候会自动变成0进行运算,但是undefined和数字进行运算的时候会转换成NaN,导致最终返回值就是NaN,返回的不是一个数字,但是NaN却是属于number这一类,虽然它本身的意思是【不是数字】。

对象:

这个感觉要写好多= = 下次如果写关于函数,构造函数,对象之间关系的笔记的话再写吧。

(简单点)

对象是一组【键值对】(key-value)的集合,是一种无序的复合数据集合。

大括号定义了一个对象,赋值给object,这个变量object就指向一个对象,对象内部包含两个键值对,字符串 aa 是【键值】。键名和键值之间用冒号分隔,两个键值之间用逗号分隔(最后一个属性的逗号可加可不加)。

键名

对象的所有键名都是【字符串】,所以加不加引号都可以,上面没加引号的键名也可以这样写

但是用双引号的好处是,键名你可以想怎么取就怎么取,因为JavaScript实际上取名字有时候会有限制的,不能为所欲为,比如你的键名不用引号,想取一个全部都是数字的键名是不允许的,开头用数字会报错,但是你加上引号的话,键名开头用数字就没问题。加双引号是更标准的,功能更强大,不加双引号就是取名稍有限制,但是更为偷懒的方法。

数值,字符串,null,undefined,symbol,布尔值,对象这七个类型,我们按照他们的特性让他们分成两个组合吧。

【基本类型】:数值,字符串,null,undefined,symbol,布尔值

【复合类型】:对象 (之所以对象是复合类型,是因为一个对象往往由多个基本类型的值组合在一起的)

3.类型之间的转换

数据类型的转换分为【强制转换】 和 【自动转换

强制转换:

自己用一些函数等方法把任意值转换成另一个类型的数据。(比如用 函数String() 把数值 1 转换成字符串 ‘1’ )

一般转换类型会转成下面三种:

1.数值

2.字符串

3.布尔值

1 数值

可以使用 Number()函数

作用: 将任意类型的值转为数值

下面分两种情况,一种参数为【基本类型】,一种为【对象】

(参数:在声明/调用也就是使用函数的时候,括号里的值就叫参数,只不过声明的时候,函数里的参数叫形参,调用的时候,参数叫实参)

(1)基本类型

其他方法:

  1. 【转整数】parseInt()

语法: parseInt(string, radix) (字符串,基数(2~36))

第二个参数意思是需要转成几进制,比如下面例子中的 10 是转成 10进制

如果parseInt的参数不是字符串,则会先转为字符串再转换。这个很重要

parseInt(10) // 10
  1. 【转浮点数】parseFloat() (不用写第二个参数是几进制,因为只能转成10进制)

  2. 【浮点数 + 整数】 - 0

  • 0 有效是因为只有加法运算符遇到字符串会自动转换成字符串,其他减法,乘法,除法都会把字符串变成数字
  1. 【浮点数 + 整数】 + (数值运算符,和Number作用一样)

Number() 和parseInt() 函数区别:

Number更加严格,只要一个值无法转成数值,整个字符串就会转为【NaN】,告诉我们这不能转为数值。

Number转成浮点数/整数都可以,parseInt只能整数

(2)对象

Number() 参数是对象时,返回【NaN】,除非时包含单个数值的数组

2 字符串

可以使用String()函数

作用: 将任意值转为字符串

下面(1)写基本类型转换规则,(2)写对象转换规则

(1)基本类型

  • 数值: 转为相应的字符串

  • 字符串: 还是原来的值

  • 布尔值: true转为‘true’, false转为‘false’

  • undefined: 转为’undefined’

  • null : 转为’null’

其他方法:

加号 + 和 空字符串 ‘’/ “”

(2)对象

参数为对象时,返回值是以字符串的形式显示该参数的类型;

参数为数组时,返回该数组的字符串形式

>String(['a','cd'])
<"a,cd"
>String({'a':1,'b':2})
<"[object Object]"

3 布尔值

可用函数 Boolean()

作用: 将任意类型转为布尔值

除了以下五个值的转换结果是false,其他值全为true

  • undefined

  • null

  • -0 / +0

  • NaN

  • ‘’ (空字符串)

  • false

【背诵方法: 除了symbol和对象外的其他数据类型,共5个数据类型,每个数据类型至少有一个值是false。

number类型有两个值是false,分别是0 和 NaN;

string类型的空字符串’'是false;

null,undefined这两个本身是false;

布尔值中的false肯定是false】

【或者更方便的方法是用两个感叹号】

一个感叹号作用是以布尔值的方式取自己的相反值,两个感叹号就是相反值的相反值,也就是以本身布尔值的方式表示出来

自动转换

下面三种情况JavaScript会自动转换数据类型

① 不同类型的数据互相运算 (加法运算符)

② 对非布尔值类型的数据求布尔值

③ 对非数值类型的值使用一元运算符(+ 和 -)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值