# 数据类型和变量

# 课程目标

学习使用 JavaScript 变量来描述真实世界的数据,知道如何区分各种数据类型 学习掌握 JavaScript 基础变量以及数据类型部分内容

# 变量

在 JavaScript 使用变量存储数据,您可以将变量简单地视为代码中数据的“存储容器”,在变量中存储不限于值,你可以把任何数据存储在变量中。 以往,在 JavaScript 中只有一种创建变量的方法 —— var 语句。但在最新的 JavaScript 版本中,我们还有另外两张新的两种方式—— let 和 const .

阅读下面材料,学习怎么使用变量,并且学会使用正确的命名规则定义有意义的变量。

# 数字

在编程中,数据和数据类型是构成任何编程语言的基本要素.

数据也无处不在,它可以是你的名字,你今天测验的分数,也可以是你的朋友列表,甚至可以是你说的一句话,所有这些信息在 JavaScript 世界中就会用不同的数据类型来表示。

在 JavaScript 中定义数字实际上非常简单。数字数据类型包括任何正负整数以及小数。请阅读下面材料学习数字

# NUll 和 Undefined

NUll 和 Undefined 这是两种很容易混淆的数据类型。null 是没有值的数据类型,undedined 是值缺少值的数据类型。请阅读下面的材料具体学习它们两者的区别

# 任务一

世界卫生组织建议以身体质量指数(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 = 0var 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 有什么区别?
  • 请解释变量提升现象?以及如何避免
  • nameNAME是同一个变量吗?