JavaScript的变量类型
JavaScript的数据类型分为两种:
(1)值类型(基本数据类型):字符串(String)、数字(Number)、布尔(Boolean)、未定义(Undefined)、空(Null)、Symbol。
(2)引用数据类型:对象(Object)、数组(Array)、函数(Function)
1.字符串
字符串可以是引号中的任意文本。您可以使用单引号或双引号:
正常写法:var name = "王路飞"
var name = '王路飞'
特殊写法:var name = '"王路飞"'
var name = "123'王路飞'"
不允许:var name = '王路飞"
var name = "王路飞'
var name = "王"路"飞"
var name = '王'路'飞'
如果非要写,可以使用转义字符:var name = "\"王路飞\""
\是对后面的那个符号有影响 对前面的那个符号没有影响
2.数字
JavaScript 只有一种数字类型。数字可以带小数点,也可以不带:
- 整数:
var a = 1;
- 浮点数:
var a = 1.2;
科学计数法
• var a = 123e5; var b = Number.MAX_VALUE
• var a = 123e-5; var b = Number.MIN_VALUE
3.布尔
布尔(逻辑)只能有两个值:true 或 false。
4. Undefined
• var b = true
• var b = false
var a;
未定义 undefined
当声明了变量 但是没有给初始化的时候 会返回的是undefined
5.null
• var n = null
- 类型是object,用来表示一个空的对象
- 如果你要是想删除一个对象的话 那么就将这个对象的结果赋值为null
JavaScript的变量类型高级
1.字符串
JavaScript字符串(String)就是由零个或多个Unicode字符组成的字符序列。零个字符表示空字符串。
ascii码中:a 97 A 65 0 48
- 字符串字面量/字符串直接量
- 字符串必须包含在单引号或双引号中
- 如果字符串包含在双引号中,则字符串内可以包含单引号;反之,也可以在单引号中包含双引号
- 在ECMAScript 3中,字符串必须在一行内表示,换行表示是不允许的,如果要换行显示字符串,可以在字符串中添加换行符(\n)
- 在ECMAScript 5中,字符串允许多行表示.实现方法:在换行结尾处添加反斜杠(\).反斜杠和换行符不作为字符串直接量的内容
- 在字符串中插入特殊字符,需要使用转义字符\,如单引号,双引号等
- 字符串中每个字符都有固定的位置.第1个字符的下标位置为0,第2个字符的下标位置为1...···以此类推,最后一个字符的下标位置是字符串长度减1
转义字符
- 转义字符是字符的一种间接表示方式。在特殊语境中,无法直接使用字符自身
var str = "请看\"这个是一个双引号";
console.log(str);
如果在一个正常字符前添加反斜杠,JavaScript会忽略该反斜杠
字符串操作
- 借助String类型的原型方法,可以灵活操作字符串
- 在JavaScript中,可以使用加号(+)运算符连接两个字符串
- 使用字符串的length属性获取字符串的字符个数(长度)
获取的字符串的长度,长度指的是 这个字符串一共有多少个字符
console.log(str.length); - 在ES5中,字符串可以作为只读数组使用,可以通过中括号运算符添加下标访问某一个值。下标从0开始,最大位置的下标是length-1
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
</head>
<body>
<script>
var str = "老师说";
var say = "你好啊";
console.log(str+say);
console.log(str + 666);
console.log(str + 888);
console.log(1 + 1);
console.log("1" + 1);
console.log(1 + "1");
var str1 = "今天是个好天气123 b5";
console.log(str1.length);
console.log(str1[0]);
//获取最后一个字符
console.log(str1[str1.length-1]);
</script>
</body>
</html>
String方法
String方法是可以将其他类型转换成字符串类型
字符串加法:
<script>
var str = 'hello';
// string
// 字符串 + 字符串 ===》将字符串链接在一起了
console.log(str + 'kanghui');
// number
// 字符串 + 数字 ===》将数字和字符串链接在一起了
console.log(str + 5);
console.log(str + 1.5);
// boolean
// 字符串 + boolean ===》将true和字符串链接在一起了
console.log(str + true);
console.log(str + false);
// undefined
// 字符串 + undefined ===》将undefined和字符串在一起了
console.log(str + undefined);
// null
console.log(str + null);
// 综上所述:
// 在+号的两端 只要有一端是字符串 那么结果就是字符串
// 结果是拼接的结果
</script>
强制类型转换
<script>
// 强制类型转换
// string
// var str = 'abcd';
// 判断数据的数据类型
// console.log(typeof str);
// 将str强制类型转换为字符串
// var str_string = String(str);
// console.log(typeof str_string);
// number
// var str2 = 123;
// console.log(typeof str2);
// var str2_string = String(str2);
// console.log(typeof str2_string);
// boolean
// var str3 = true;
// console.log(typeof str3);
// var str3_string = String(str3);
// console.log(str3_string);
// console.log(typeof str3_string);
// undefined
// var str4 = undefined;
// console.log(typeof str4);
// var str4_string = String(str4);
// console.log(typeof str4_string);
// null null就是null的类型 但是在判断null的时候
// 那么他显示的是object类型
var str5 = null;
console.log(typeof str5);
var str5_string = String(str5);
console.log(typeof str5_string);
// 总结:
// 可以使用String() 来将任何的数据转换为字符串类型
</script>
字符串--toString方法
加号的两端 只要有一端是字符串 那么结果就是字符串
如果在加号的两端一端有字符串了 那么另一端的数据就会调用toString 然后再进行拼接, toString本身的意义也是将对相应的数据转换为字符串类型
除了null和undefined之外,其他的数据类型的数据 都有toString方法
字符串表现(并不修改原变量)。
当该对象被表示为一个文本值时,或者一个对象以预期的字符串方式引用时自动调用。
<script>
// 思考:为什么加号的两端 只要有一端是字符串 那么结果就是
// 字符串呢?
// 如果在加号的两端一端有字符串了 那么另一端的数据就会调用
// toString 然后再进行拼接
// console.log('a' + 1);
// 1.toString() ===> '1' 再将'a' + '1' ==>'a1'
// 除了null和undefined之外,其他的数据类型的数据 都有toString方法
// 返回的是相应的值
// toString本身的意义也是将对相应的数据转换为字符串类型
// string
// console.log('a'.toString());
// number
// var a = 1;
// 判断了a.toString()的值的类型
// console.log(typeof a.toString());
// boolean
// var a = true;
// console.log(typeof a.toString());
// undefined
// undefined没有toString这个方法
// console.log(undefined.toString());
// null
// null没有toString方法
// console.log(null.toString());
</script>
2.数字
数字(Number)也称为数值或者数
当数字直接出现在程序中时,被称为数值直接量。在 JavaScript程序中,直接输入的任何数字都被视为数值直接量。
JavaScript 中的所有数字都是以 64 位浮点数形式存储,包括整数。例如,2 与 2.0 是同一个数。
- 浮点数溢出
执行数值计算时,要防止浮点数溢出。例如,0.1+0.2 并不等于 0.3。num = 0.1+0.2; //0.30000000000000004
这是因为 JavaScript 遵循二进制浮点数算术标准(IEEE 754)而导致的问题。这个标准适合很多应用,但它违背了数字基本常识。
解决方法:浮点数中的整数运算是精确的,所以小数表现出来的问题可以通过指定精度来避免。例如,针对上面的相加可以这样进行处理。a = (1+2)/10; //0.3
这种处理经常在货币计算中用到。例如,元可以通过乘以 100 而转成分,然后就可以准确地将每项相加,求和后的结果可以除以 100 再转换回元 - 特殊数值
数字--Infinity
- 计算超出范围会得到无穷大(infinity)或者无穷小(-infinity)
- 分母为0会构成无穷大Infinity 或负无穷大-Infinity
- 关于Infinity的运算, 无法计算 加减乘除一个数字都是Infinity,Infinity和Infinity计算,加法乘法为Infinity,其他为NaN
- Infinity和自身相等 其他比较正常
<script>
// 无穷
// 分母为0的时候 就会出现无穷
// 一个正数除以一个0 ==》正无穷 infinity
// console.log(1 / 0);
// 一个负数除以一个0 ==》负无穷 -infinity
// console.log(-1 / 0 );
// console.log(typeof Infinity);
// infinity的计算
// infinity是一个数字类型
// infinity和数字的+-*/
// infinity和数值的计算的结果都是infinity
// +
console.log(Infinity + 1);
// -
console.log(Infinity - 1);
// *
console.log(Infinity * 100);
// /
console.log(Infinity / 100);
// infinity和infinity的+-*/
// infinity和infinity的计算中 增加(+ 和 *)的时候都是infinity
// infinity和infinity的计算中 减少(- 和 /)的时候都是NaN
// +
console.log(Infinity + Infinity);
// -
// Infinity不是一个具体值 所以减法时候不可以计算
// 结果是NaN not a number
console.log(Infinity - Infinity);
// *
console.log(Infinity * Infinity)
// /
console.log(Infinity / Infinity);
</script>
<script>
// 无穷和数值的比较
// 正无穷和数值的比较
// console.log(Infinity > 1);// true
// console.log(Infinity < 1);// false
// ==判断的两边的数据是否相等
// console.log(Infinity == 1);
// 负无穷和数值的比较
console.log(-Infinity > 1);
console.log(-Infinity < 1);
console.log(-Infinity == 1);
// 无穷和无穷的比较
console.log(Infinity == Infinity);// true
console.log(Infinity > Infinity); // false
console.log(Infinity < Infinity); // false
console.log(Infinity > -Infinity);// true
</script>
数字--NaN
- NaN,即非数值(Not a Number)是一个特殊的数值
- 这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)
- NaN特点:无论和谁比较都是fasle 无论和谁计算都是NaN(除了+字符串之外)
<script>
// NaN not a number 不是一个数值
var str = '红浪漫';
// 一个字符串是不可以减一 理论行不通
// js怕报错 所以返回了一个NaN
var n = str - 1;
// console.log(n);
// 计算
// 数值和NaN计算 除了+字符串之外 其余的全是NaN
// +
// console.log(n + 'abc');
// console.log(n + 1);
// console.log(n + true);
// console.log(n + undefined);
// console.log(n + null);
// -
// console.log(n - 'abc');
// console.log(n - 1);
// console.log(n - true);
// console.log(n - undefined);
// console.log(n - null);
// *
// console.log(n * 'abc');
// console.log(n * 1);
// console.log(n * true);
// console.log(n * undefined);
// console.log(n * null);
// /
// console.log(n / 'abc');
// console.log(n / 1);
// console.log(n / true);
// console.log(n / undefined);
// console.log(n / null);
// 比较
// 任何和NAN的比较的结果都是false
// string
console.log(n > 'abc');
console.log(n < 'abc');
// number
console.log(n > 1);
console.log(n < 1);
// boolean
console.log(n > true);
console.log(n < true);
console.log(n < false);
console.log(n > false);
// undefined
console.log(n > undefined);
console.log(n < undefined);
// null
console.log(n > null);
console.log(n < null);
// 总结:
// 任何和NaN的计算结果都是NaN(字符串加法除外)
// 任何和NaN的比较结果都是false
</script>
isNaN:isNaN方法检测一个值是不是非纯数字 , 如果非纯数字就返回true 如果是纯数字就返回false
<script>
// isNaN is not a number 是 不是一个数字(不是一个数字)
// 判断他不是一个数字
// 如果不是一个数字 就返回true 是一个数字就返回false
console.log(isNaN(123));
console.log(isNaN(-123));
console.log(isNaN('haihaihai'));
</script>
最大值最小值
在js中数字也是有最大值和最小值的支持的,如果超过最大值或最小值,就可能计算有误
console.log(Number.MIN_VALUE);//5e-324 支持数字的最小值
console.log(Number.MAX_VALUE);//1.7976931348623157e+308 支持数字的最大值
正无穷负无穷
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
console.log(Number.POSITIVE_INFINITY); //Infinity
console.log(Number.NEGATIVE_INFINITY); //-Infinity
</script>
</body>
</html>
3.布尔
布尔类型仅包含两个固定的值:true
和false
。其中true
代表真,false
代表假。
在一些判断等操作中,需要使用布尔值
哪几种情况是false的时候 千万要注意
(1)空串 console.log(Boolean(''))
(2)数字为0 console.log(Boolean(0))
(3)NaN console.log(Boolean(NaN))
(4)false console.log(Boolean(false))
(5)undefined console.log(Boolean(undefined))
(6)null console.log(Boolean(null))
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>21_变量类型高级-布尔-boolean</title>
</head>
<body>
<script>
// 布尔:强制类型转换
// var a = true;
// var b = false;
// console.log(a);
// console.log(b);
// string
// Boolean(字符串)的时候 判断字符串里面是否有内容
// 如果有内容就是true 如果没有内容就是false
// console.log(Boolean('abcd'));
// console.log(Boolean('')); //false
// console.log(Boolean(' ')); //true
// number
// Boolean(数值) 只要有数值都是true 但是0除外
// console.log(Boolean(1));
// console.log(Boolean(-1));
// console.log(Boolean(1.1));
// console.log(Boolean(-1.1));
// console.log(Boolean(0)); //false
// console.log(Boolean(Infinity)); //true
// console.log(Boolean(-Infinity)); //true
// console.log(Boolean(NaN)); //false
// boolean
// console.log(Boolean(true)); //true
// console.log(Boolean(false)); //false
// undefined
// console.log(Boolean(undefined)); //false
// // null
// console.log(Boolean(null)); //false
// 哪几种情况是false的时候 千万要注意
// (1)空串
// (2)0
// (3)NaN
// (4)false
// (5)undefined
// (6)null
</script>
</body>
</html>
4.Undefined
变量被声明了,但没有赋值时,就等于undefined
//打印a的时候,找到a了 但是找不到a的值,所以返回一个undefined
var a;
console.log(a);
console.log(a+1);//undefined+1 计算不了//不声明b,直接使用b,js直接报错 ReferenceError(引用错误): b is not defined
//说明完全没有找到b这个变量 代码报错停止运行
console.log(b)
5.null
- null 类型是第二个只有一个值的数据类型,这个特殊的值是 null。
- 从逻辑角度来看,null 值表示一个空对象指针,而这也正是使用 typeof 操作符检测null时会返回"object"的原因
undefined是null的子类 就是undefined是null的儿子
所以在判断undefined和null是否相等的时候 就返回true
console.log(a == b);
扩展
1. Undefined派生自Null,两者都是表示空缺值,转换成布尔值都是假值,可以相等
2. 但是Undefined和Null属于两种不同的类型
3. Undefined隐含着意外的空值,而Null隐含着意料之中的空值。因此设置一个变量、参数为空的时候,建议使用null而不是undefined