网站前端_JavaScript-基础入门.0004.JavaScript数据类型

news/2024/5/10 0:33:58/文章来源:https://blog.csdn.net/weixin_33843947/article/details/91903856

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

简单说明:

1. JavaScript中有6种数据类型,Undefined/Null/Boolean/Number/String/Object,需要注意的是不支持创建自定义类型的机制.所有值必须如上6中类型之一

2.typeof操作符可以操作变量,也可以操作字面量,虽然也可以typeof()类似函数调用使用,但是其并非内置函数,函数在Js中是对象而不是数据类型,可通过此来区分

 

数据类型:

Undefined

说明: undefined类型只有一个值undefined,var声明变量时,没有赋值的变量会隐式赋值为undefined,其主要作用是用于区分空对象和未经初始化的变量

1

2

3

4

5

6

7

8

9

10

//userInfo是Undefined类型

var userInfo

console.log(

    //值默认是undefined

    userInfo,

    //类型返回的字符串是undefined

    typeof userInfo,

    //类型返回的字符串是undefined

    typeof userName

)

注意: var声明未赋值的变量与未声明的变量通过typeof语句判断类型时都返回undefined,所以为了避免此种情况的发生,强烈建议声明的变量必须赋值

 

Null

说明: Null派生自Object,typeof返回object,作为一个空对象引用,如果变量准备用来保存对象,最好将变量初始化为null,这样当检查null值就知道对象是否已经创建

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

//空对象: 表示这个对象还未创建

var userName = undefined

var userInfo = null

console.log(

    //值为null

    userInfo,

    //Null和Undefined的值相等

    userInfo == userName,

    //类型返回的字符串是object

    typeof userInfo,

    //类型返回的字符串是undefined

    typeof userName,

    //Null和Undefined的类型不等

    userInfo === userName

)

注意: undefined派生自null,因此Js规定它们相等性测试(alert(undefined==null))返回true,可通过typeof变量的类型来比较,但是还是强制大家变量要初始化

 

Boolean

说明: Boolean只有两个值true/false,Js中所有类型的值都有与它们等价的值,包括显式转换Boolean()或条件语句中的隐式转换

数据类型转换为true转换为false
Booleantruefalse
String任何非空字符串空字符串
Number任何非零数字值(包含无穷大)0和NaN
Object任何对象null
Undefined undefined

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

//isActived是Boolean类型

var isActived = true

console.log(

    //值为true

    isActived,

    //类型返回的字符串是boolean

    typeof isActived,

    //空字符串转换为false

    Boolean(''),

    //0转换为false

    Boolean(0),

    //NaN转换为false

    Boolean(NaN),

    //null转换为false

    Boolean(null),

    //undefined转换为false

    Boolean(undefined)

)

 

Number

说明: Number类型包含整型和浮点型,输入字面值支持二进制/八进制(0开头,超出0则自动按10进制)/十进制/十六进制(0X开头,超出则报异常),输出都是十进制

1

2

3

4

5

6

7

8

//userAge的类型为Number类型

var userAge = 25

console.log(

    //值为25

    userAge,

    //类型返回的字符串是number

    typeof userAge

)

1. 整数值的字面量支持八进制/十进制/十六进制

1

2

3

4

5

6

7

8

// 整数值 - 八进制

var octNum = 0700

console.log(octNum)

// 整数值 - 十进制

var intNum = 1000

// 整数值 - 十六进制

var hexNum = 0xFF

console.log(hexNum)

2.浮点值的字面量支持小数,科学计数法,但是小数点前或后面必须至少有一位数字,对于那些过大或过小的数值,可以使用科学计数法来表示

1

2

3

4

5

6

7

8

9

10

11

12

13

14

var floatNum = 0.80

// 浮点值 - 有效,但不推荐此写法

var floatNum = .8

console.log(floatNum)

/* 浮点值 - 隐式转换

   由于保存浮点数内存占用比整数值大两倍,所以Js会自动将可以转换为整型的浮点值转换为数值

 */

var floatNum = 8.0 // var floatNum = 8.

console.log(floatNum)

// 浮点值 - 科学计数法

var floatNum = 3.14e9

console.log(floatNum)

var floatNum =  0.00000000314

console.log(floatNum)

注意:浮点数最高精度是17,但算术运算可能不准确,例如console.log(0.1+0.2),会出现0.30000000000000004,运算结果会不准确,所以做判断时要考虑这个问题(如使用整型判断)

3.数值型值有最大值(Number.MAX_VALUE)和最小值(Number.MIN_VALUE),超出最大值返回(Number.POSITIVE_INFINITY),超出最小值返回(Number.NAGITIVE_INFINITY),可通过inFinite()判断是否超出范围,没超出返回true,超出返回false

1

2

3

4

5

6

7

8

9

10

11

12

13

14

// 浮点值 - 最小值

var floatNum = Number.MIN_VALUE

console.log(floatNum)

// 浮点值 - 小于最小值返回-Infinity(Number.POSITIVE_INFINITY)

var floatNum = -1000e1000

console.log(floatNum)

// 浮点值 - 最大值

var floatNum = Number.MAX_VALUE

console.log(floatNum)

// 浮点值 - 超出最大值返回Infinity(Number.NEGATIVE_INFINITY)

var floatNum = 1000e1000

console.log(floatNum)

// 判断值 - 通过isFinite()判断是否超出范围,没有超出返回true,否则返回false

console.log(isFinite())

4.NaN即非数值(Number.NaN)表示本来希望返回数值的但是没有返回数值,0/0或num/0*0都返回NaN,任何数除以0返回Infinity,

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

// NaN - 0除以0返回(Number.NaN)

var nanNum = 0/0

console.log(nanNum)

// NaN - 任何数除以0返回无穷大(Number.POSITIVE_INFINITY)

var nanNum = 12/0

console.log(nanNum)

// NaN - 任何数除以0再乘以0返回(Number.NaN)

var nanNum = 12/0*0

console.log(nanNum)

// NaN - NaN不与任何值相等

console.log(NaN==NaN)

// NaN - NaN与任何值运算的结果均为NaN

console.log(Number.NaN + 1)

// NaN - isNaN()可以判断任意类型数据

console.log(

    // true

    isNaN(Number.NaN),

    // false, 250是一个数值

    isNaN(250),

    // false, 空字符串转换为数值0

    isNaN(''),

    // false, true转换为数值1

    isNaN(true)

)

注意: 由于NaN可由多种方式出现,所以NaN不与任何值相等包括它自己,任何值与其运算都返回NaN,可通过isNaN()函数来判断值是不是NaN,此函数收到一个值后会尝试转换为数值

1

2

3

4

5

6

7

8

// NaN - 测试对象在调用isNaN()时,会基于值调用toString()方法再测试返回值是否可以转换为数值

var objNaN  = {

    toString: function(){

        // 以数字开头,以字母结尾的依然返回NaN,必须是纯数字/空字符串/布尔值/定制对象才不是NaN

        return '521LMLZ'

    }

}

console.log(isNaN(objNaN))

扩展:  isNaN()函数也适用于对象,在调用isNaN()函数中,首先会调用valueOf()方法,然后确定返回值是否能够转换为数值,如果不能,则基于这个返回值再调用toString()方法,再测试返回值

5.如果要将非数值转换为数值,可使用Number(),参数支持任意类型, parseInt(),第一个参数只支持字符串,第一个参数可选指定进制, parseFloat(),参数只支持字符串

转换数值前转换方式转换数值后
trueNumber(true)1,Boolean类型的true/false分别转换为1和0
25Number(25)25,数值型直接返回
nullNumber(null)0,空对象返回0
undefinedNumber(undefined)NaN,undefined返回NaN
[0-9]+[a-z]+Number([0-9]+[a-z]+)NaN,出现字符转换为NaN
{toString: function(){return 521314}}Number(...)对象toString方法返回值尝试转换为数值,失败则返回NaN

注意: Number()会尝试将其它数据类型转换为数值,如果是对象,则基于这个对象的返回值调用toString方法再测试,类似'521314LZZ'这样先转换为数值或通过isNaN测试返回true转换为Number时候返回NaN

6.parseInt(string [,radix])函数在转换字符串时比Number更加合理,因此在处理整数时更加常用,parseFloat(string)只认识以整数开头和浮点数和科学计数法

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

// parseInt(string [,radix])

console.log(

    // 解析以数字开头的字面量,则只取开头数值

    parseInt('521314LZ'),

    // 无法转换为数值则返回NaN

    parseInt('LMM'),

    // 解析浮点数,则取整

    parseInt('3.14'),

    // 解析空字符串,则返回NaN

    parseInt(''),

    // 解析布尔值true,则返回NaN

    parseInt(true),

    // 支持解析常规进制

    parseInt('AF', 16)

)

// parseFloat(string)

console.log(

    // 解析以数字开头的字面量,则只取开头数值

    parseFloat('3.14LMM'),

    // 解析以数字加点的字面量,只认一个小数点

    console.log('3.1.4'),

    // 支持解析科学计数法

    parseFloat('3.14e10')

)

String

说明: String由零或多个Unicode字符组成的字符序列,即字符串,字符串可以由双引号"/单引号'表示,

字面量含义
\n换行
\t制表
\b退格
\r回车
\f翻页
\\斜杠
\'单引号
\"双引号
\xnn以十六进制nn表示一个字符,如\x41
\unnnn以十六进制nnnn表示一个unicode字符

1

2

3

4

5

6

7

8

9

10

11

12

13

14

var userAge = 25

console.log(

    // toString方法可以将任意类型的变量转换为字符串

    userAge.toString(),

    // .toString(radix)可通过指定进制,将数值变量转换为对应进制的字符串

    userAge.toString(2),

    userAge.toString(8),

    userAge.toString(10),

    userAge.toString(16),

    // 可通过String()强制转换null为字符串null

    String(null),

    // 可通过String()强制转换undefined为字符串undefined

    String(undefined)

)

说明:.toString([redix])是所有对象的公共方法,也就是所有对象可以转换为字符串,null和undefined直接转换为null和undefined.

 

Object

 

说明: Object其实就是一组数据和功能的集合,对象可以执行new操作符后跟要创建的对象类型的名称来创建,单创建Object实例无任何卵用,Object类型是所有它实例的基础,实例对象将自动携带它具有的属性和方法

 

对象属性
constructor保存着用于创建当前对象的函数
对象方法
hasOwnProperty(propertyName)用于检查给定的属性在当前对象实例中(而不是实例的原型中)                                                                                         
isPrototypeOf(object)用于检查传入对象是否是另一个对象的原型
toLocaleString()返回对象的字符串表示,该字符串与执行的环境地区有关
toString()返回对象的字符串表示
valueOf()返回对象的字符串,数值,或布尔值表示,通常和toString()方法的返回值相同


 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

/* 

 * new Object - 创建对象

 */

var newObj = new Object

var newObj = new Object()

 

/*

 * constructor - 获取创建对象的真实函数

 */

// Object()里可以任意传参,可传数值,字符串,布尔值等,其实是对参数类型的封装,而且还可以进行对应的值计算(因为内部都有一个隐式转换为值的方法),可以使用.constructor来获取真实对象

var numObj = new Object(2)

var strObj = new Object('2')

var boolObj = new Object(true)

alert(numObj.constructor + strObj.constructor + boolObj.constructor)

 

 

/*

 * hasOwnProperty - 判断对象是否存在指定属性

 */

var userInfo = new Object()

userInfo.name = "李满满"

if(userInfo.hasOwnProperty('name')){

    alert('userInfo存在name属性.')

}else{

    alert('userInfo不存在name属性.')

}

 

 

登录乐搏学院官网http://www.learnbo.com/

或关注我们的官方微博微信,还有更多惊喜哦~

 

 

本文出自 “满满李 - 运维开发之路” 博客,请务必保留此出处http://xmdevops.blog.51cto.com/11144840/1846118

转载于:https://my.oschina.net/learnbo/blog/857692

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_767195.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大型网站系统与Java中间件实践

2019独角兽企业重金招聘Python工程师标准>>> 分布式系统简介 分布式系统有很多节点,且这些节点协同工作。 线程与进程的执行模式 1、线程的执行模式:互不通信的多线程模式;基于共享容器协同的多线程模式,如经典的生产者…

从零开始用 Flask 搭建一个网站(二)

2019独角兽企业重金招聘Python工程师标准>>> 从零开始用 Flask 搭建一个网站(一) 介绍了如何搭建 Python 环境,以及 Flask 应用基本项目结构。我们要搭建的网站是管理第三方集成的控制台,类似于 Slack。 本篇主要讲解数…

android中文网站

Google Developers中国网站发布 用户评价: / 55 差好 最后更新于 2016年12月09日 点击数:15209 我们很高兴地宣布,Google Developers 中国网站 (developers.google.cn) 正式发布! Google Developers 中国网站是特别为中国开发者…

python获取网站http://www.weather.com.cn 城市 8-15天天气

参考一个前辈的代码,修改了一个案例开始学习beautifulsoup做爬虫获取天气信息,前辈获取的是7日内天气, 我看旁边还有8-15日就模仿修改了下。其实其他都没有变化,只变换了获取标签的部分。但是我碰到 一个span获取的问题&#xff0…

网站静态化处理—前后端分离—上(6)

前文讲到了CSI技术,这就说明网站静态化技术的讲述已经推进到了浏览器端了即真正到了web前端的范畴了,而时下web前端技术的前沿之一就是前后端分离技术了,那么在这里网站静态化技术和前后端分离技术产生了交集,所以今天我将讨论下前…

交友网站数据库曝光了150万用户信息

据外媒报道, 近日一个新西兰交友网站对一个包含150多万用户信息的数据库进行了安全性保护。这家网站的运营商C&Z Tech Limited表示, MacKeeper安全研究中心的安全专家在发现这个问题后向该公司发出提醒。 C&Z 在发给MacKeeper的邮件中表示&#…

基于SSM的校园招聘网站

​源码编号:D-E22 项目类型:也属于Java web项目/Java EE项目(非开源) 项目名称:基于SSM的校园招聘网站 [Recruit] 当前版本:V1.0.1版本 难度等级:✩✩ 复杂程度:✩✩✩ 点击查看…

基于Java web的旅游网站(源码+文档)

源码编号:B-E57点击查看(分类规则) 项目类型:Java web项目/Java EE项目(非开源) 项目名称:基于java web的旅游网站 [travel] 当前版本:V1.0.0版本 用户类型:双角色&…

基于JSP的旅游网站系统

源码编号:B-E74点击查看(分类规则) 项目类型:Java web项目/Java EE项目(非开源) 项目名称:基于JSPServlet的旅游景点服务平台(旅游网站) 源码作者:霹雳、逍…

基于JSP+Servlet的宠物养护网站

源码编号:B-E77 项目名称:基于JSPServlet的宠物养护网站 源码作者:逍遥游制作 论文作者:逍遥游撰写 当前版本:V1.0版本 用户类型:三角色(用户、管理员) 项目架构:B…

有图有真相 好图好流量 十个妙招优化网站图片

【51CTO.com快译】对于任何一个电子商务网站来说,图片优化都是必不可少的环节。图片对于消费者和网友的影响妙不可言,优化图片是一门网店里的艺术。图片的清晰度、吸引力和加载时间都将直接影响到你的用户。下面我们就为大家介绍一些优化图片的小技巧&am…

自学Java网站推荐

自学Java可以学会吗? 很多同学问我自学Java能学会吗,我可以很负责任的告诉你完全可以!因为俺当初就是自学Java找到的工作,目前互联网资源丰富,只要你想学肯定能学会!!! 自学Java最…

大型网站技术基石之 OpenStack

我们知道虚拟化能够充分的利用资源,带来各种各样的好处。 当一个网站不大,只需要四五台机器就可以支撑的时候,可以采用手工的方式虚拟机,但是当网站流量很高,需要成千上万台机器的时候,那就非常不方便了。 …

云服务器 ECS 搭建WordPress网站:安装 WordPress

安装 WordPress请先下载最新版的 WordPress,网址: https://cn.wordpress.org/ 。也可直接到阿里云市场选择WordPress镜像完成一键部署,点击查看。 操作步骤 1.将下载的安装包解压缩。 2.打开 Xshell,然后打开 Xftp,将解…

云服务器 ECS 建站教程:部署 LAMP (CentOS 7.2)

部署 LAMP (CentOS 7.2)简介 LAMP指LinuxApacheMysql/MariaDBPerl/PHP/Python是一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共…

​详解SEO优化中所使用的新浪博客站群

SEO优化的过程中网站的权重是关键词排名不可或缺的因素,为了提升网站的权重SEOer通常会利用第三方平台的高权重为SEO所用,今天给大家讲一个关于新浪博客站群的概念以及具体的操作方法。顾名思义新浪博客站群分解开来通俗点来说就是新浪博客的集群&#x…

什么样的自学Java网站才适合学习者?

前言 有很多Java学习者常常问我一些在学习Java过程中遇到的问题,我发现很多问题总是卡在该知识点的概念层面,比如:一个多线程的程序这样加锁对不对?什么是原子性? 这个Lambda表达式为什么编译不通过?这个问…

web设计中那些因素可能影响网站后期优化

开发十年,就只剩下这套Java开发体系了 >>> web设计中那些因素可能影响网站后期优化。 1.网站代码的简洁实用性。网站源文件html代码、js代码、css代码等应尽可能的压缩处理。能用jquery-min.js的最好不要用jquery.js;css里能合在一起的样式尽…

静态网站内容区

1.em与strong,b与i的区别 1.b、i属于修饰标签;strong、em属于内容类标签; 2.b、strong标签表现为加粗样式;em、i表现为倾斜样式; 3.strong、em表强调;strong比em语气更强烈; 4.strong和em真正做…

通过TMG防火墙后网站的GZIP压缩就失效了?

前段时间和一些做网站开发测试的朋友在聊天时,他们提到在做网站测试时发现只要是在公司内走微软TMG访问一些带有GZIP格式的页面时,发现GZIP就失效了,我正好一直在搞ISA/TMG,就想让我帮想想看是哪里出问题了?当时聊时我…