image-20210301140011992.png

数值类型:number

JavaScript 没有整型和浮点型,只有一种数字类型,即number类型。

  1. var x = 10;
  2. var y = 3.14;
  3. console.log(x,typeof x); // 10 "number"
  4. console.log(y,typeof y); // 3.14 "number"

注意:在JavaScript中,只要是数,就是数值型(number)的。无论整浮、浮点数(即小数)、无论大小、无论正负,都是number类型的。

字符串类型:string

字符串创建(两种方式)

  • 变量 = “字符串”
  • 字串对象名称 = new String (字符串)

单引号 双引号均可

  1. var str1="hello world";
  2. var str1= new String("hello word");

image.png

  1. // 字符串对象的操作
  2. var str = "hello"; // 这就是字符串对象
  3. console.log(str);
  4. // 字符串对象内置属性
  5. // length 计算字符串的长度
  6. console.log( str.length );
  7. // 字符串对象内置方法
  8. // toUpperCase(); 字母大写转换
  9. // toLowerCase(); 字母小写转换
  10. console.log( str.toUpperCase() );
  11. console.log( str.toLowerCase() );
  12. // indexOf 获取指定字符在字符串中第一次出现的索引位置
  13. // 字符串也有下标,也可以使用中括号来提取字符串的指定字符
  14. console.log(str[1]); // e
  15. console.log( str.indexOf("e") ); // 1
  16. // 切片,当前方法支持使用负数代表倒数下标
  17. // slice(开始下标) 从开始位置切到最后
  18. // slice(开始下标,结束下标) 从开始下标切到指定位置之前
  19. var str = "helloworld";
  20. var ret = str.slice(3,6); // 开区间,不包含结束下标的内容
  21. console.log(ret); // low
  22. var ret = str.slice(5);
  23. console.log(ret); // world
  24. var ret = str.slice(2,-1);
  25. console.log(ret); // lloworl
  26. var ret = str.slice(-4,-1);
  27. console.log(ret); // orl
  28. var ret = str.slice(-1,-4);
  29. console.log(ret); // orl
  30. // split 正则分割,经常用于把字符串转换成数组
  31. var str = "广东-深圳-南山";
  32. var ret = str.split("-");
  33. console.log( ret );
  34. // substr 截取
  35. var str = "hello world";
  36. var ret = str.substr(0,3);
  37. console.log(ret); // hel
  38. // trim 移除字符串首尾空白
  39. var password = " ge llo ";
  40. var ret = password.trim();
  41. console.log(password.length); // 13
  42. console.log(ret.length); // 6

连字符和+号的区别
键盘上的+可能是连字符,也可能是数字的加号。如下:

  1. console.log("我" + "爱" + "你"); //连字符,把三个独立的汉字,连接在一起了
  2. console.log("我+爱+你"); //原样输出
  3. console.log(1+2+3); //输出6

总结:如果加号两边都是数值,此时是加。否则,就是连字符(用来连接字符串)。

布尔类型:boolean

  1. console.log(true);
  2. console.log(false);
  3. console.log(typeof true);
  4. console.log(true === 1);
  5. console.log(true == 1);
  6. console.log(true + 1);
  7. console.log(false + 1);

空值(Undefined和Null)

空对象:null

变量已定义,没有赋值

  1. var c1 = null; //空对象. object
  2. console.log(typeof c1);

未定义:undefined

  1. var d1;
  2. //表示变量未定义
  3. console.log(typeof d1);

  • undefined类型

undefined类型只有一个值,即 undefined。
(1)当声明的变量未初始化时,该变量的默认值是 undefined。
(2)当函数无明确返回值时,返回的也是值 undefined;

  • null类型

另一种只有一个值的类型是 null,它只有一个专用值 null,即它的字面量。值 undefined 实际上是从值 null 派生来的,因此 ECMAScript 把它们定义为相等的。

尽管这两个值相等,但它们的含义不同。undefined 是声明了变量但未对其初始化时赋予该变量的值,null 则用于表示尚未存在的对象。如果函数或方法要返回的是对象,那么找不到该对象时,返回的通常是 null。

类型转换

js中,类型转换有2种:一种就是强制转换,一种就是自动转换。

因为js是一门弱类型的脚本语言,所以变量会在运算符的运行要求,有时候根据运算符的要求,进行自动转换的.

强制转换

  1. // 1. 转换数据为数值类型
  2. // parseInt 把数据转换成整数
  3. // parseFloat 把数据转换成小数
  4. // Number 把数据转换成数值
  5. var box1 = "一共100件"; // 转换会失败
  6. var box1 = "100件"; // 转换会成功
  7. var ret = parseInt(box1);
  8. console.log(box1);
  9. console.log(ret);
  10. //
  11. var box2 = "3.14";
  12. console.log(parseFloat(box2) ); // 3.14
  13. //
  14. var box3 = "3.14"; // 使用Number转换的数据里面必须是纯数字!!!!否则都会转换失败
  15. // var box3 = "3.1.4"; // 转换失败!
  16. console.log( Number(box3) );
  17. // 对于转换数值,如果转换失败的话,则结果为 NaN ,是 Not a Number ,但是NaN的类型也是number类型
  18. // 2. 转换数据为字符串
  19. // 变量.toString()
  20. // String(数据)
  21. var box4 = 3.14;
  22. var ret = box4.toString();
  23. console.log(ret);
  24. //
  25. ret = String(box4);
  26. console.log(ret);
  27. // 3. 转换数据成布尔类型
  28. // Boolean()
  29. var box5 = "";
  30. console.log( Boolean(box5) ); // false
  31. var box6 = -1;
  32. console.log( Boolean(box6) ); // true
  33. var box7 = 0;
  34. console.log( Boolean(box7) ); // false;
  35. var box8 = "false";
  36. console.log( Boolean(box8) ); // true
  37. var box9 = [];
  38. console.log( Boolean(box9) ); // true
  39. var box10 = {};
  40. console.log( Boolean(box10) ); // true
  41. var box11 = "0";
  42. console.log( Boolean(box11) ); // true
  43. var box12 = null;
  44. console.log( Boolean(box12) ); // false
  45. var box13 = undefined;
  46. console.log( Boolean(box13) ); // false

自动转换

  1. // 所谓的自动转换,其实弱类型中的变量会根据当前代码的需要,进行类型的自动隐式转化
  2. var box1 = 1 + true;
  3. // true 转换成数值,是1, false转换成数值,是0
  4. console.log(box1); // 2
  5. var box2 = 1 + "200";
  6. console.log(box2); // 1200 原因是,程序中+的含义有2种,第一: 两边数值相加, 第二: 两边字符串拼接.但是在js中运算符的优先级中, 字符串拼接的优先级要高于数值的加减乘除,所以解析器优先使用了+号作为了字符串的拼接符号了,因为程序就需要+号两边都是字符串才能完成运算操作,因此1变成字符串最终的结果就是 "1" +"200"
  7. var box3 = 1 - "200";
  8. console.log(box3); // -199;因为-号中表示的就是左边的数值减去右边的数值,因此程序就会要求"200"是数值,因此内部偷偷的转换了一下

堆栈

根据数据类型不同,有的变量储存在栈中,有的储存在堆中。具体区别如下: 原始变量及他们的值储存在栈中,当把一个原始变量传递给另一个原始变量时,是把一个栈房间的东西复制到另一个栈房间,且这两个原始变量互不影响。

引用值是把 引用变量的名称储存在栈中,但是把其实际对象储存在堆中,且存在一个指针由变量名指向储存在堆中的实际对象,当把引用对象传递给另一个变量时,复制的其实是指向实际对象的指针, 此时 两者指向的 是同一个数据,若通过方法改变其中一个变量的值,则访问另一个变量时,其值也会随之加以改变;但若不是通过方法 而是通过 重新赋值 此时 相当于 重新开了一个房间 该值的原指针改变 ,则另外一个 值不会随他的改变而改变。

  1. // 初始值类型
  2. var a = "yuan";
  3. var b = a;
  4. a = "alvin";
  5. console.log(a);//alvin
  6. console.log(b);//yuan
  7. // 对象类型
  8. var arr1=[1,2];
  9. arr2 = arr1;
  10. arr1.push(3);
  11. console.log(arr1)// [1,2,3]
  12. console.log(arr2);//[1,2,3]
  13. arr1=[4,5];
  14. console.log(arr1);//[4,5]
  15. console.log(arr2);//[1,2,3]