JavaScript(二)数据类型(二)
布尔值
布尔值指真或假,开或关,是或否,关键字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(二)数据类型(二)的更多相关文章
- JavaScript筑基篇(二)->JavaScript数据类型
说明 介绍JavaScript数据类型 目录 前言 参考来源 前置技术要求 JavaScript的6种数据类型 哪6种数据类型 undefined 类型 null 类型 boolean 类型 numb ...
- JavaScript学习记录二
title: JavaScript学习记录二 toc: true date: 2018-09-13 10:14:53 --<JavaScript高级程序设计(第2版)>学习笔记 要多查阅M ...
- JavaScript 入门教程二 在HTML中使用 JavaScript
一.使用 <script> 元素的方式有两种:直接在页面中嵌入 JavaScript 代码和引用外部 JavaScript 文件. 二.使用内嵌方式,一般写法为: <script t ...
- JavaScript基础笔记二
一.函数返回值1.什么是函数返回值 函数的执行结果2. 可以没有return // 没有return或者return后面为空则会返回undefined3.一个函数应该只返回一种类型的值 二.可变 ...
- JavaScript基本概念(二)
JavaScript 基本概念(二) 操作符和语句 目录 操作符 一元操作符 位操作符 布尔操作符 乘性操作符 其他操作符 语句部分 说起操作符,回忆下上一篇文章末尾说的话. 操作符 一元操作符 ++ ...
- 一些有用的javascript实例分析(二)
原文:一些有用的javascript实例分析(二) 5 求出数组中所有数字的和 window.onload = function () { var oBtn = document.getElement ...
- 如何对Javascript代码进行二次压缩(混淆)
如何对Javascript代码进行二次压缩(混淆) 对Javascript代码进行压缩(混淆),可以有效减少传输和加载时间.但是,不是所有的变量(方法)都能被混淆的,一般来说,只有非属性的变量(方法) ...
- (C/C++学习笔记) 二. 数据类型
二. 数据类型 ● 数据类型和sizeof关键字(也是一个操作符) ※ 在现代半导体存储器中, 例如在随机存取存储器或闪存中, 位(bit)的两个值可以由存储电容器的两个层级的电荷表示(In mode ...
- 理解JavaScript继承(二)
理解JavaScript继承(二) 5.寄生式继承 function object(o) { function F() {} F.prototype = o; return new F(); } fu ...
- 基础JavaScript练习(二)总结
任务目的 学习与实践JavaScript的基本语法.语言特性 练习使用JavaScript实现简单的排序算法 任务描述 基于上一任务 限制输入的数字在10-100 队列元素数量最多限制为60个,当超过 ...
随机推荐
- 【阿里面试系列】Java线程的应用及挑战
文章简介 上一篇文章[「阿里面试系列」搞懂并发编程,轻松应对80%的面试场景]我们了解了进程和线程的发展历史.线程的生命周期.线程的优势和使用场景,这一篇,我们从Java层面更进一步了解线程的使用.关 ...
- 开始使用Filebeat
认识Beats Beats是用于单用途数据托运人的平台.它们以轻量级代理的形式安装,并将来自成百上千台机器的数据发送到Logstash或Elasticsearch. (画外音:通俗地理解,就是采集数据 ...
- redis 系列20 服务器下
二. serverCron函数 2.3 更新服务器每秒执行命令次数 serverCron函数中的trackOperationsPerSecond函数会以每100毫秒一次的频率执行,这个函数以抽样计算的 ...
- Python爬虫入门教程 19-100 51CTO学院IT技术课程抓取
写在前面 从今天开始的几篇文章,我将就国内目前比较主流的一些在线学习平台数据进行抓取,如果时间充足的情况下,会对他们进行一些简单的分析,好了,平台大概有51CTO学院,CSDN学院,网易云课堂,慕课网 ...
- 关于HotSpot VM以及Java语言的动态编译 你可能想知道这些
目录 1 HotSpot VM的历史 2 HotSpot VM 概述 2.1 编译器 2.2 解释器 2.3 解释型语言 VS 编译型语言 3 动态编译 3.1 什么是动态编译 3.2 HotSpot ...
- react~props和state的介绍与使用
props是参数的传递,从上层模块向下层模块进行拿传递:而state是提局域变量,一般在本模块内使用,props是不能改变的,而state可以通过setState去修改自身的值. props Reac ...
- 设计模式总结篇系列:装饰器模式(Decorator)
在面向对象设计过程中,经常会遇到需要对现有的类的功能进行扩展,通常我们可以采用继承的方式.例如老罗最近在做手机,一开始需要定义手机所应具有的功能: interface Phone{ public vo ...
- 从0到1,了解NLP中的文本相似度
本文由云+社区发表 作者:netkiddy 导语 AI在2018年应该是互联网界最火的名词,没有之一.时间来到了9102年,也是项目相关,涉及到了一些AI写作相关的功能,为客户生成一些素材文章.但是, ...
- springboot情操陶冶-web配置(七)
参数校验通常是OpenApi必做的操作,其会对不合法的输入做统一的校验以防止恶意的请求.本文则对参数校验这方面作下简单的分析 spring.factories 读者应该对此文件加以深刻的印象,很多sp ...
- springboot情操陶冶-jmx解析
承接前文springboot情操陶冶-@Configuration注解解析,近期笔者接触的项目中有使用到了jmx的协议框架,遂在前文的基础上讲解下springboot中是如何整合jmx的 知识储备 J ...