定义未赋值和未定义的变量的区别
// 定义未赋值 只是定义了变量,但是没有给变量进行赋值操作
var int1 ;
console.log(int1); // 未赋值 执行结果是 undefined
// 直接使用一个没有定义过的变量
console.log(int2); // 未定义 执行结果是 报错
NaN
NaN,not a number 不是一个数值,是表示存储的数据的数据类型。
如果有非数值参与计算,结果就是 NaN
var str1 = '北京';
var str2 = '上海';
// 两个变量中存储的数据,都不是数值
// 执行结果就是NaN
var res1 = str1 - str2;
console.log(res1);
有NaN参与,结果就是NaN
var res2 = 100 - str1;
console.log(res2);
如果是 + 加号,两侧都是数值,执行加法运算。
有一个是字符串,就执行字符串拼接操作。
var res3 = 100 + str1;
console.log(res3);
总结
NaN虽然表示是一个非数字 , 但是一般是算术运算执行的结果,因此NaN 仍然是数值类型。
执行运算时,非加法运算,只要有NaN参与,执行结果都是NaN。
如果是加法运算,有 NaN 执行字符串拼接操作,都是数值执行加法运算
NaN永远不会等于NaN,NaN == NaN 执行结果是 false。
JavaScript的规定,NaN表示的是非数字,但是这个非数字也是不同的,因此 NaN 不等于 NaN,
两个NaN永远不可能相等
再比如:
console.log ( '北京' - 100 == '北京' - 100 );
这里比较的不是 ‘北京’-100 这个表达式,而是 ‘北京’-100 的结果。
左侧 ‘北京’-100 结果是 NaN,右侧 ‘北京’-100 结果是 NaN,但是 NaN 不等于 NaN 。
但是如果这里是加号而不是减号,就会执行字符串拼接,结果就是 true:
console.log ( '北京' + 100 == '北京' + 100 );//执行结果是 true
如何解决字符串不能解析变量?
在JavaScript中,单引号、双引号的字符串,都不能解析变量。你写的变量,只能显示为变量名称的字符串,不会显示为变量中存储的数值。比如:
var airPollution = 52 ;
console.log( '今天的空气污染是 : airPollution' );
//此时只能输出字符串 '今天的空气污染是 : airPollution',而不会显示52
解决这种问题,我们有两种方法:
方法1 使用字符串拼接方式
console.log( '今天的空气污染是 : ' + airPollution);
方法2 使用模板字符串,可以解析变量
console.log( `今天的空气污染是 : ${
airPollution}` );
模板字符串使用的是 反引号 键盘上方 1 左侧的按钮。
在模板字符串 反引号中 使用 ${变量} 包裹变量,就可以解析变量数值了。
字符串拼接和字符串解析变量 执行结果,没有区别,你爱用哪个用那个。
JavaScript的3种调试方式
JavaScript中,变量存储的数据,有时,我们知道是什么,有时不清楚内容,需要输出查看。
在 JavaScript中,有3种常用的查看调试方式:
// 1, window.alert('内容') --- 弹出提示框
window.alert('beijing');
// 2, document.write('内容') --- 在页面输出
document.write('北京');
// 3, console.log('内容') --- 控制台输出 --- 浏览器控制台 console 内容中
console.log('北京');
控制台输出是常用方式。
数据类型的检测
在JavaScript中,数据类型的检测,使用 typeof() 方法 / 函数。所谓的 方法 / 函数 , 现在指的是JavaScript给我们定义好的功能。
typeof 操作符返回一个字符串,表示未经计算的操作数的类型。
语法
typeof 运算符后接操作数:
- typeof+空格+变量/数据(这种语法形式不推荐使用,容易程序执行错误)
- typeof(变量/数据)
typeof 并不能非常准确的表示每一种数据类型,一般是使用判断 布尔类型、数值类型、字符串类型、undefined类型。其他数据类型我们之后有更加准确,但是复杂的判断方式。
实例
整数,浮点数,NaN 执行结果都是 number:
var int1 = 100;
var float1 = 100.123;
console.log( typeof(int1) ); //执行结果是 number
console.log( typeof(float1) ); //执行结果是 number
console.log( typeof(NaN) ); //执行结果是 number
布尔类型的执行结果是 boolean:
var bool1 = true;
console.log( typeof(bool1) ); //执行结果是 boolean
字符串类型的执行结果是 string:
var str1 = '北京';
console.log( typeof(str1) ); //执行结果是 string
undefined 执行结果是 undefined:
console.log( typeof(undefined) );//执行结果是 undefined
null 执行结果是 object:
console.log( typeof(null