# 数据类型和变量
# 课程目标
学习使用 JavaScript 变量来描述真实世界的数据,知道如何区分各种数据类型 学习掌握 JavaScript 基础变量以及数据类型部分内容
# 变量
在 JavaScript 使用变量存储数据,您可以将变量简单地视为代码中数据的“存储容器”,在变量中存储不限于值,你可以把任何数据存储在变量中。 以往,在 JavaScript 中只有一种创建变量的方法 —— var 语句。但在最新的 JavaScript 版本中,我们还有另外两张新的两种方式—— let 和 const .
阅读下面材料,学习怎么使用变量,并且学会使用正确的命名规则定义有意义的变量。
- 变量 | JavaScript 现代教程 (opens new window)
- 如何存储你需要的信息 — 变量 | MDN (opens new window)
- 变量提升 (opens new window)
- W3School 变量 (opens new window)
# 数字
在编程中,数据和数据类型是构成任何编程语言的基本要素.
数据也无处不在,它可以是你的名字,你今天测验的分数,也可以是你的朋友列表,甚至可以是你说的一句话,所有这些信息在 JavaScript 世界中就会用不同的数据类型来表示。
在 JavaScript 中定义数字实际上非常简单。数字数据类型包括任何正负整数以及小数。请阅读下面材料学习数字
- MDN 数字 (opens new window)
- Number (opens new window)
- Math (opens new window)
- 基础运算符,数学 (opens new window)
# NUll 和 Undefined
NUll 和 Undefined 这是两种很容易混淆的数据类型。null 是没有值的数据类型,undedined 是值缺少值的数据类型。请阅读下面的材料具体学习它们两者的区别
- null - JavaScript | MDN (opens new window)
- undefined - JavaScript | MDN (opens new window)
- Optional chaining (?.) - JavaScript | MDN (opens new window)
- 空值合并运算符(??) - JavaScript | MDN (opens new window)
- 对 null 和 undefined 进行比较 (opens new window)
- Undefined 与 Null 的区别 (opens new window)
- 空值合并运算符 '??' (opens new window)
# 任务一
世界卫生组织建议以身体质量指数(Body Mass Index, BMI)來衡量肥胖程度, 请你使用 JavaScript 根据人的身高和体重计算出 BMI 值.
其计算公式:
BMI = 体重 / 身高 * 身高
要求
- 您需要设置合适的变量名存储身高和体重,以及置合适的变量名存储 BMI 值
- BMI 值请打印在控制台中,BMI 必须四舍五入到最接近的整数。
- 给代码添加合适的注释
# 任务二
在本练习中,您将编写一些实用函数来快速计算订单总金额计算并且输出结果。
- 满 300 减 30,满 200 减 10,满 100 减 5.
- 会员打 9.8 折
- 当两个优惠条件都满足时,就先打 9.8 折,再进行满减
/**
* @method calculateSum
* @param {number }price 打折钱的总消费额
* @param {Boolean}vip 是否为 vip
* @return {number} 返回打折后的总金额
*/
function calculateSum(price,vip){
// your code here
}
console.log(calculateSum(300,false)) ->270
console.log(calculateSum(300,true)) ->284
# 任务三
封装实现函数,判断参数是否为数字类型
/**
* @description 实现判断参数是否为合法的数字类型,如何是返回 ture ,如果不是 返回 false。
* @method isNumeric
* @param num 任意数据类型的变量
* @return {Boolean} 如何是数字类型返回 ture ,如果不是 返回 false。
*/
function isNumeric(num) {
//your code here
}
//测试用例
console.log(isNumeric("0")); // ->false
console.log(isNumeric(0)); // ->true
console.log(isNumeric(null)); // ->false
console.log(isNumeric("")); // ->false
console.log(isNumeric(" ")); // ->false
如以上代码,请实现 isNumeric 函数,并跑通代码中的测试用例
要求空格,空字符串,null 均需要返回 false
# 任务四
完成一些判空的小练习
/*
实现一个判断传入的参数是否为 undefined 类型
返回一个布尔值,如果是undefied 为true,否之,为fase
*/
funtion isUndefined(arg){
//do something
}
/*
实现一个判断传入的参数是否为 null 类型
返回一个布尔值,如果是null 为true,否之,为fase
*/
funtion isNull(arg){
//do something
}
// 测试用例
var expUndefined = undefined;
var expNull = null;
var expZero = 0;
var a;
var o = new Object();
console.log(isUndefined(expUndefined)); // ->true
console.log(isUndefined(expNull)); // ->false
console.log(isUndefined(a)); // ->true
console.log(isUndefined(o)); // ->true
console.log(isNull(expUndefined)); // ->false
console.log(isNull(expNull)); // ->true
console.log(isNull(expZero)); // ->false
console.log(isNull(a)); // ->false
console.log(isNull(o)); // ->false
如以上代码,分别实现 isUndefined 及 isNull 函数,并跑通代码中的测试用例。
# 自测问题
- JavaScript 中的数据类型有哪些?
- 说说 undefined,null,NAN 之间的区别。
- 请问
console.log( "Hello World" % 4)
会输出什么内容? - 什么情况下 JavaScript 会发生隐式转换?请解释是如何转换
- 下面代码将在控制台中输出什么内容?
console.log("Hello Word + 1 + 2");
- 那这段代码将又将在控制台中输出什么内容
console.log("Hello Word " + 1 + 2);
- var、let、const 有什么区别?
- 请解释变量提升现象?以及如何避免
name
和NAME
是同一个变量吗?