javascript实践教程-05-数据类型

晴空闲云
• 阅读 1098

本节目标

  1. 掌握js中7种数据类型。
  2. 掌握5种基本数据类型number、string、boolean、null、undefined的声明。
  3. 掌握js中数组的声明和数组相关的方法。
  4. 掌握js中对象的声明和属性、方法的使用。

内容摘要

本篇介绍了js中的7种数据类型,其中5种基本数据类型:number、string、boolean、null、undefined,2种引用类型:array和object。

阅读时间30~40分钟。

数据类型

前面我们学习了变量和常量。其中有这样的代码:

let x = 1;

这边变量x等于1,1是一个整数,如果我们需要存储用户的姓名、需要存储金钱、需要存储若干商品数据等等,我们就需要用到其他数据类型。

在js中数据类型包含如下几种:

基本数据类型(值类型)
    1. number(数字)
    2. string(字符串)
    3. boolean(布尔值)
    4. null(空)
    5. undefined(未定义)
引用数据类型
    1. array(数组)
    2. object(对象)

下面依次讲解各个数据类型。

number(数字)

和java不同,js中数字就包含整数和浮点数。

示例1,声明若干个数字:

let i = 10;
let f = 1.101;
let x = -5;

在js中可以使用typeof查看数据类型:

console.log(typeof i); // 输出number
console.log(typeof f); // 输出number
console.log(typeof x); // 输出number

string(字符串)

如果说我们要表示一个人的姓名、一句话,我们可以用字符串类型。js中的字符串可以用双引号 " 包裹,也可以用单引号 ' 包裹。

示例1,声明若干字符串:

let str = "js is useful.";
console.log(str);
console.log(typeof str); // string

let name = "晴空闲云";
console.log(name);
console.log(typeof name); // string

boolean(布尔值)

如果要表示一个事物是否怎么样的时候,比如说:

1. 是否完成?
2. 是否理解?
3. 是否出现错误?
4. 浏览量是否超过上万?
5. 粉丝数是否上万?
6. 等等

在这个场景下,我们可以用布尔值来表示,js中的布尔值就两个:

1. true
2. false

其中:

true表示为真,中文可以理解为是,英文可以理解为yes。
false表示为假,中文可以理解为否,英文可以理解为no。

示例1,声明若干布尔值:

let isOK = true;
console.log(isOK);
console.log(typeof isOK); // boolean
let isFinish = false;
console.log(isFinish);
console.log(typeof isFinish); // boolean

null(空值)

null在很多语言都有相应语法,比如php、数据库、java等等,表示为空的意思。

示例1,声明几个变量:

let n = null;
console.log(n); // null
console.log(typeof n); // object ? 

思考:

这边如果用 typeof 查看null的类型,为什么是object呢?

解答:

大家还记的第一章的时候说过javascript用10天就开发出来了吗?对,就是早期的系统的一个bug。

undefined(未定义)

js中如果直接使用一个没有定义的变量,那么该变量就是 undefined 的。

示例1,打印一个未定义的变量:

let i;
console.log(i); // undefined
console.log(typeof i); // undefined

我们有可以直接给变量声明为 undefined,不过这个一般没有什么意义。

let j = undefined;
console.log(j); // undefined
console.log(typeof j); // undefined

array(数组)

数组就是用来存储一堆数据的数据类型,数组的两个基本要素:

1. 元素,数组中的数据,和java不同,js中的数组可以存储任意类型的数据。
2. 下标,用来记录每个元素的位置,用来取值和赋值。

网上有三要素的说法,还有一个要素是:长度,就是指数组内元素的个数,因为这个长度根据元素变化,所以叫做要素有点牵强。

数组定义

在js中,数组可以用[]和new Array()进行声明:

// []方式
let 数组名 = [元素1, 元素2, 元素3, ...]; 
// new Array()方式
let 数组名 = new Array(元素1, 元素2, 元素3, ...);

示例1,用两种方法声明一个数组存储任意数据:

let arr = [1, 'hello', true, null, undefined];
console.log(arr); // (5) [1, 'hello', true, null, undefined]
console.log(typeof arr); // object

let arr2 = new Array("tom", "", 0, 10, {});
console.log(arr2); // (5) [1, 'hello', true, null, undefined]
console.log(typeof arr2); // object

在js中,数组的归属是对象object。

思考:,参考如下代码,请问数组的长度是多少?

let arr = [5];
console.log(arr); // 数组长度是?

let arr2 = new Array(5);
console.log(arr2); // 数组长度是?

通过这个思考题可以发现,new Array()和[]的区别,实务中一般用[]的多。

上面只是对数组做一个简单示例,虽然js数组中可以存储不同类型的数据,只是在实务中,一般数组都是存储有规则的一堆数据。

示例2,声明一个数组存储蔬菜:

let vegetables = ["西蓝花", "西红柿", "洋葱", "秋葵", "丝瓜", "佛手瓜"];
console.log(vegetables); // (6) ['西蓝花', '西红柿', '洋葱', '秋葵', '丝瓜', '佛手瓜']
console.log(typeof vegetables); // object

数组既然包含了多个元素,那么必然要能实现增加、删除、修改、查询操作,下面我们对数组的增删改查做一个讲解。

增删改查

1)增加元素

增加元素是使用数组对象的push方法,会将新增加的元素加到数组末尾。

let vegetables = ["西蓝花", "西红柿", "洋葱", "秋葵", "丝瓜", "佛手瓜"];
vegetables.push("南瓜"); // 增加元素到数组末尾
console.log(vegetables); // (7) ["西蓝花", "西红柿", "洋葱", "秋葵", "丝瓜", "佛手瓜", "南瓜"]

2)删除元素

删除元素是使用数组对象的splice方法,指定下标进行删除。

let vegetables = ["西蓝花", "西红柿", "洋葱", "秋葵", "丝瓜", "佛手瓜"];
vegetables.splice(1, 1); // 从第几个开始删除几个元素
console.log(vegetables); // (5) ["西蓝花", "洋葱", "秋葵", "丝瓜", "南瓜"]

3)修改元素

修改元素直接用下标索引,重新赋值即可。

let vegetables = ["西蓝花", "西红柿", "洋葱", "秋葵", "丝瓜", "佛手瓜"];
vegetables[5] = "南瓜";
console.log(vegetables); // (6) ["西蓝花", "西红柿", "洋葱", "秋葵", "丝瓜", "南瓜"]

4)查询元素

直接用下标即可查询元素:

let vegetables = ["西蓝花", "西红柿", "洋葱", "秋葵", "丝瓜", "佛手瓜"];
console.log(vegetables[1]); // 输出?

通过for循环遍历元素:

let vegetables = ["西蓝花", "西红柿", "洋葱", "秋葵", "丝瓜", "佛手瓜"];
for (let i in vegetables) {
    console.log(i + ": " + vegetables[i]);
}

遍历元素后面我们讲解循环的时候,会再细讲。

数组长度

通过length属性,可以获取到数组的长度。

let vegetables = ["西蓝花", "西红柿", "洋葱", "秋葵", "丝瓜", "佛手瓜"];
console.log(vegetables.length); // 输出?

二维数组

如果数组中还有数组,我们称呼为二维数组。

示例1,声明一个数组存储不同类型的蔬菜:

let vegetables = [
    ["西蓝花", "黄花菜", "菜花", "韭菜花"],
    ["西红柿", "洋葱", "秋葵"],
    ["丝瓜", "佛手瓜", "南瓜", "冬瓜", "黄瓜"],
];

二维数组的增删改查和一维数组类似,通过下标即可索引,我们看几个简单的示例,就不再赘述。

console.log(vegetables[0]); // 输出?
console.log(vegetables[1][2]); // 输出?
vegetables[2][1] = "苦瓜";

object(对象)

js中对象是一组属性与方法的集合,这里说的对象和后面要讲解的面向对象不一样,这边说的对象是一个数据类型,面向对象是一种编程思想。

声明对象

js中声明对象有两种方式:

// 1. new Object();
// 2. {}

示例1,使用new Object()和{}各声明一个对象。

1)使用new Object()声明人物:id为1,name为李逍遥,description为仙剑1主角。

let human = new Object();
human.id = 1;
human.name = "李逍遥";
human.description = "仙剑1主角";
console.log(human); // {id: 1, name: '李逍遥', description: '仙剑1主角'}

2)使用{}声明人物:id为2,name为赵灵儿,description为仙剑1女主。

let human2 = {id: 2, name: '赵灵儿', description: '仙剑1女主'};
console.log(human2); // {id: 2, name: '赵灵儿', description: '仙剑1女主'}

这个例子我们是给对象增加了一些属性,当然我们也可以给对象增加一些方法。

示例2,接上例,我们给对象增加一些方法。

1)给李逍遥增加打怪的方法:

human.attack = function() {
    console.log(this.name + "使用万剑诀");
}

2)给赵灵儿增加回血的方法:

human2.addHP = function() {
    console.log(this.name + "使用五气朝元,全体回血");
}

这边我们还没有讲解过方法,只要知道对象可以有属性,也可以有方法即可。

调用对象属性和方法

对象声明了之后,其中的属性和方法可以直接调用。

示例3,接上例,我们调用对象的属性和方法。

1)打印出李逍遥的描述,李逍遥发起攻击:

console.log(human.description);
human.attack(); // 李逍遥使用万剑诀

2)打印出赵灵儿的描述,赵灵儿发动回血技能:

console.log(human2.description);
human.addHP(); // 赵灵儿使用五气朝元,全体回血

遍历对象属性和方法

除了数组可以遍历,js中的对象也可以遍历,遍历也可以用for in语法。

在遍历之前,我们有一个知识点需要提一下,js中获取对象属性,可以通过点.符号获取,也可以和数组一样通过下标获取。

示例4,接上例,打印human的姓名:

console.log(human['name']); // 李逍遥

js就是这么神奇,玩出了其它语言没有的花样,知道这个之后,我们用for in进行遍历。

示例5,接上例,遍历human:

for (let i in human) {
    console.log(i + ": " + human[i]);
}

其中:

i是属性。
human[i]就是对应的值。

这边对象我们更多的是知道有这个类型,在后续面向对象的章节中,我们将进行更加详细的介绍。

本节总结

  1. js中有7种数据类型:5种基本类型,2种引用类型。
  2. 5种基本类型:number、string、boolean、null、undefined。
  3. 2种引用类型:array、object。

练习题

  1. js中整数最小值、最大值分别是多少?为什么呢?
  2. 字符串类型是对象吗?如果是对象,有哪些属性和方法?
  3. 声明相关的布尔值,表示今天是否下雨、是否适合出游等。
  4. 我们typeof null是object,这个bug是怎么产生的,请查阅相关资料,并说明。
  5. null和undefined有什么区别?
  6. 声明数组,并存储若干水果,计算其长度,并遍历打印输出。
  7. 遍历数组的时间复杂度是多少?遍历二维数组呢?
  8. 请选择一款你喜欢的游戏,尝试声明游戏里的事物,如人物、道具等等,至少5个。
  9. 基本数据类型和引用数据类型有什么区别?
点赞
收藏
评论区
推荐文章
秃头王路飞 秃头王路飞
5个月前
webpack5手撸vue2脚手架
webpack5手撸vue相信工作个12年的小伙伴们在面试的时候多多少少怕被问到关于webpack方面的知识,本菜鸟最近闲来无事,就尝试了手撸了下vue2的脚手架,第一次发帖实在是没有经验,望海涵。languageJavaScript"name":"vuecliversion2","version":"1.0.0","desc
光头强的博客 光头强的博客
5个月前
Java面向对象试题
1、请创建一个Animal动物类,要求有方法eat()方法,方法输出一条语句“吃东西”。创建一个接口A,接口里有一个抽象方法fly()。创建一个Bird类继承Animal类并实现接口A里的方法输出一条有语句“鸟儿飞翔”,重写eat()方法输出一条语句“鸟儿吃虫”。在Test类中向上转型创建b对象,调用eat方法。然后向下转型调用eat()方
刚刚好 刚刚好
5个月前
css问题
1、在IOS中图片不显示(给图片加了圆角或者img没有父级)<div<imgsrc""/</divdiv{width:20px;height:20px;borderradius:20px;overflow:h
Jacquelyn38 Jacquelyn38
1年前
面试官:JavaScript的数据类型你了解多少?
前言作为JavaScript的入门知识点,Js数据类型在整个JavaScript的学习过程中其实尤为重要。最常见的是边界数据类型条件判断问题。我们将通过这几个方面来了解数据类型:概念检测方法转换方法概念undefined、Null、Boolean、String、Number、Symbol、BigInt为基础类型;Ob
小森森 小森森
5个月前
校园表白墙微信小程序V1.0 SayLove -基于微信云开发-一键快速搭建,开箱即用
后续会继续更新,敬请期待2.0全新版本欢迎添加左边的微信一起探讨!项目地址:(https://www.aliyun.com/activity/daily/bestoffer?userCodesskuuw5n)\2.Bug修复更新日历2.情侣脸功能大家不要使用了,现在阿里云的接口已经要收费了(土豪请随意),\\和注意
晴空闲云 晴空闲云
5个月前
css中box-sizing解放盒子实际宽高计算
我们知道传统的盒子模型,如果增加内边距padding和边框border,那么会撑大整个盒子,造成盒子的宽度不好计算,在实务中特别不方便。boxsizing可以设置盒模型的方式,可以很好的设置固定宽高的盒模型。盒子宽高计算假如我们设置如下盒子:宽度和高度均为200px,那么这会这个盒子实际的宽高就都是200px。但是当我们设置这个盒子的边框和内间距的时候,那
艾木酱 艾木酱
5个月前
快速入门|使用MemFire Cloud构建React Native应用程序
MemFireCloud是一款提供云数据库,用户可以创建云数据库,并对数据库进行管理,还可以对数据库进行备份操作。它还提供后端即服务,用户可以在1分钟内新建一个应用,使用自动生成的API和SDK,访问云数据库、对象存储、用户认证与授权等功能,可专
密钥管理系统-为你的天翼云资产上把“锁
本文关键词:数据安全,密码机,密钥管理一、你的云上资产真的安全么?1.2021年1月,巴西的一个数据库30TB数据被破坏,泄露的数据包含有1.04亿辆汽车和约4000万家公司的详细信息,受影响的人员数量可能有2.2亿;2.2021年2月,广受欢迎的音频聊天室应用Clubhouse的用户数据被恶意黑客或间谍窃取。据悉,一位身份不明的用户能够将Clubho
NVIDIA安培架构下MIG技术分析
关键词:NVIDIA、MIG、安培一什么是MIG2020年5月,NVIDIA发布了最新的GPU架构:安培,以及基于安培架构的最新的GPU:A100。安培提供了许多新的特性,MIG是其中一项非常重要的新特性。MIG的全名是MultiInstanceGPU。NVIDIA安培架构中的MIG模式可以在A100GPU上并行运行七个作业。多实
helloworld_28799839 helloworld_28799839
5个月前
常用知识整理
Javascript判断对象是否为空jsObject.keys(myObject).length0经常使用的三元运算我们经常遇到处理表格列状态字段如status的时候可以用到vue
晴空闲云
晴空闲云
Lv1
教师
专注前端,把复杂的编程讲简单,又不失深度。@公众号:晴空闲云
26
文章
4
粉丝
2
获赞