布尔值
布尔值指真或假,开或关,是或否,关键字true和false。下面这些值会被转换成false:

  • undefined
  • null
  • 0
  • -0
  • NaN
  • ""    //  空字符串

布尔值包含toString()方法,可以用这个方法将字符串转换为true或false。
如var b = true; b.toString() 则变成字符串"true"。

null和undefined
null是JavaScript的关键字,他表示一个特殊值,常用来描述空值,使用typeos(null)结果返回object,我们可以把它理解成一个特殊的对象,主要用来描述一个字符串,数组或者一个对象是空的没有值的。

JavaScript还有第二个用于表示空值undefined,它是变量的一种取值。

  • 如果变量没有被初始化将被赋值为undefined。
  • 如果查询对象属性或数组元素的值时,返回undefined则说明这个属性或元素不存在。
  • 如果函数没有返回任何值,默认返回的是undefined。
  • 引用没有提供实参的函数,形参的值是undefined。

undefined是预定义的全局变量(它和null不一样,它不是关键字),它的值就是未定义。在ECMAScript3中,undefined是可读/写的变量,可以给它赋予任意值,这个错误在ECMAScript5中做了修正。undefined在该版本中是只读的。如果使用typeof(undefined)会得到undefined,表名这个值是这个类型的唯一成员。

尽管null和undefined是不同的,但它们都表示空的值,两者往往可以互换,使用“==”会得到两者是相等的,如果使用“===”则两者是不相等的。null和undefined都不包含任何属性和方法。

全局对象
全局对象在JavaScript中有着重要的用途,全局对象的属性是全局定义的符号,JavaScript程序可以直接使用。当JavaScript解释器启动时(或者任何web浏览器加载新页面的时候),他将创建一个新的全局对象,并给它一组定义的初始属性:

  • 全局属性:undefined,Infinity和NaN等
  • 全局函数:isNaN(),parseInt()和eval()等
  • 构造函数:Date(),RegExp(),String(),Object()和Array()等
  • 全局对象:Math和JSON等

在代码的最顶级,不在任何函数内的JavaScript代码,可以使用JavaScript关键字this来引用全局对象。在客户端JavaScript中,在其表示的浏览器窗口中的所有JavaScript代码中,window对象充当了全局对象,这个全局window对象有一个属性window引用自身,可以代替this来引用全局对象。window对象定义了核心全局属性,但它也针对web浏览器和客户端JavaScript定义了以少部分其它全局属性。

包装对象
JavaScript对象是一种复合值,通过使用“对象.属性/方法”来引用属性或方法。字符串string它不是对象,但是却有属性和方法。这主要是因为当使用“字符串.方法”时JavaScript就会将字符串值通过调用new String()的方式转换成对象,这个对象继承了String类下的所有属性和方法,当引用结束后这个新创建的临时对象将会被销毁。数字和布尔值也有各自的属性和方法也是一样,它们是通过Number()和Boolean()构造函数创建一个临时对象,通过临时对象来调用类的属性和方法。null和undefined没有属于自己的类,所以也就不存在属性和方法了。
如下代码:

var s = "Hello";
s.len = 4;
var t = s.len;

最终结果是t等于undefined,第二行代码创建一个临时字符串对象,并给对象封装len属性,赋值为4,其实第二行代码执行完后这个临时对象就被销毁了。所以第三行代码在接收s.len时此时s.len是一个新的临时对象。这个新的对象是没有值的,JavaScript默认给了一个undefined,所以最终t等于undefined。

不可变的原始值和可变的对象引用
原始值:undefined、null、布尔值、数字、字符串
可变对象:数组、函数、对象({键:值})。
原始值是不可更改的,任何方法都无法更改一个原始值。

例如:var s = "Hello";
s.toUpperCase();
toUpperCase()并不会将变量s中的字符串全部修改成大写,而是会返回一个新的大写字符串,不会对原数据进行修改。

原始值的比较是值的比较,只有在它们的值相等时它们才相等。如var a = 1;var b = 1我们可以说a和b是相等的,var a = "abc";var b = "abc"我们也可以说字符串a和字符串b是相等的。

但如果是对象的比较就不是值的比较了,如var a = [1,2,3];var b = [1,2,3];console.log(a === b);我们会得到结果是false,同样

var a = {"x":1};var b = {"x":1};console.log(a === b)得到的结果也是false。

我们通常将对象称为引用类型(引用一块内存地址),以此来和JavaScript的基本类型进行区分。对象的值都是引用,对象的比较是引用的比较。也就是判断两个对象是否相等,判断的是两个对象是否引用同一块内存地址。如var a = [1,2,3];var b = a;console.log(a === b);这样就会返回true了。因为a和b引用的是同一块内存。

思考题:

三位数的反转,如用户输入123,反转后输出321

JavaScript(二)数据类型(二)的更多相关文章

  1. JavaScript筑基篇(二)->JavaScript数据类型

    说明 介绍JavaScript数据类型 目录 前言 参考来源 前置技术要求 JavaScript的6种数据类型 哪6种数据类型 undefined 类型 null 类型 boolean 类型 numb ...

  2. JavaScript学习记录二

    title: JavaScript学习记录二 toc: true date: 2018-09-13 10:14:53 --<JavaScript高级程序设计(第2版)>学习笔记 要多查阅M ...

  3. JavaScript 入门教程二 在HTML中使用 JavaScript

    一.使用 <script> 元素的方式有两种:直接在页面中嵌入 JavaScript 代码和引用外部 JavaScript 文件. 二.使用内嵌方式,一般写法为: <script t ...

  4. JavaScript基础笔记二

    一.函数返回值1.什么是函数返回值    函数的执行结果2. 可以没有return // 没有return或者return后面为空则会返回undefined3.一个函数应该只返回一种类型的值 二.可变 ...

  5. JavaScript基本概念(二)

    JavaScript 基本概念(二) 操作符和语句 目录 操作符 一元操作符 位操作符 布尔操作符 乘性操作符 其他操作符 语句部分 说起操作符,回忆下上一篇文章末尾说的话. 操作符 一元操作符 ++ ...

  6. 一些有用的javascript实例分析(二)

    原文:一些有用的javascript实例分析(二) 5 求出数组中所有数字的和 window.onload = function () { var oBtn = document.getElement ...

  7. 如何对Javascript代码进行二次压缩(混淆)

    如何对Javascript代码进行二次压缩(混淆) 对Javascript代码进行压缩(混淆),可以有效减少传输和加载时间.但是,不是所有的变量(方法)都能被混淆的,一般来说,只有非属性的变量(方法) ...

  8. (C/C++学习笔记) 二. 数据类型

    二. 数据类型 ● 数据类型和sizeof关键字(也是一个操作符) ※ 在现代半导体存储器中, 例如在随机存取存储器或闪存中, 位(bit)的两个值可以由存储电容器的两个层级的电荷表示(In mode ...

  9. 理解JavaScript继承(二)

    理解JavaScript继承(二) 5.寄生式继承 function object(o) { function F() {} F.prototype = o; return new F(); } fu ...

  10. 基础JavaScript练习(二)总结

    任务目的 学习与实践JavaScript的基本语法.语言特性 练习使用JavaScript实现简单的排序算法 任务描述 基于上一任务 限制输入的数字在10-100 队列元素数量最多限制为60个,当超过 ...

随机推荐

  1. TCP/IP 详解常用术语

    业务需要,最近看TCP/IP 这本书,专业名词太多了,总结一下,给后来着参考,直接使用. 后续会在读书时慢慢添加. ACK:(ACKnowledgment)TCP首部中的确认标志. ARP:地址解析协 ...

  2. 关于Python pandas模块输出每行中间省略号问题

    关于Python数据分析中pandas模块在输出的时候,每行的中间会有省略号出现,和行与行中间的省略号....问题,其他的站点(百度)中的大部分都是瞎写,根本就是复制黏贴以前的版本,你要想知道其他问题 ...

  3. PyPI可以使用的几个国内源

    参考 阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 豆瓣(dou ...

  4. Spring Boot druid监控页添加登录访问权限(用户名+密码)

    需求 druid作为数据源的一名后起之秀,凭借其出色的性能,渐渐被大家使用.当然还有他的监控页面也有这非常大的作用.但是监控页面往往包含了很多隐私的数据信息,所以需要将其保密,所以可以为监控页面添加一 ...

  5. Python爬虫入门教程 14-100 All IT eBooks多线程爬取

    All IT eBooks多线程爬取-写在前面 对一个爬虫爱好者来说,或多或少都有这么一点点的收集癖 ~ 发现好的图片,发现好的书籍,发现各种能存放在电脑上的东西,都喜欢把它批量的爬取下来. 然后放着 ...

  6. 代理自动配置文件PAC的使用方法

    我通常上网使用两个浏览器,safari用于一般上网:Chrome安装SwitchyOmega插件,在不同的代理中切换,来保证某些网站的上网速度. 但是这种方式到了手机上就有点懵,几乎所有的iPhone ...

  7. Vimtutor(中文版)学习笔记各章小结

    在Bash中直接输入 vimtutor 打开新世界!通常阅读完需要25-30分钟不等,像玩游戏一样学会vim,然后爱不释手 里面设置了很多例子通过实践操作来学,这里仅把vimtutor上的每一章小结记 ...

  8. 使用mpvue开发小程序教程(二)

    在上篇文章中,我们介绍了使用mpvue开发小程序所需要的一些开发环境的搭建,并创建了第一个mpvue小程序代码骨架并将其运行起来.在本文中,我们来研究熟悉一下mpvue项目的主要目录和文件结构. 在V ...

  9. 优雅的启动、停止、重启你的SpringBoot项目

    前言 你是如何启动.关闭你的SpringBoot项目的?还是使用java -jar xxxx.jar启动? 还在用ps -ef找到你的pid去kill你的应用吗? 让我们来看看还有什么更加优雅的一键启 ...

  10. AR增强现实开发介绍

    AR增强现实开发介绍 ---理论篇 ​ AR增强现实开发最近做一些AR增强现实的内容,一些普及性的内容,与大家分享. 一: 什么是AR增强现实技术: 是一种将真实世界信息和虚拟世界信息“无缝”集成的新 ...