二、数据类型

132 阅读6分钟

JS的数据类型

基本数据类型

Number(数字),String(字符串),Boolean(布尔),Null(空),Undefined(未定义)

复杂数据类型

Obiect、Array 、Function 、RegExp 、 Date 、Map 等等

如何判断数据类型

使用typeof可以检测出数据类型是什么

var a = 123;
var b = "456";
var c = true;
var d = null;
var e = undefined;
var f = NaN;
console.log(typeof a);	// number
console.log(typeof b);	// string
console.log(typeof c);	// boolean
console.log(typeof d);	// object
console.log(typeof e);	// undefined
console.log(typeof f);	// number

Number 数字类型

数字类型,从字面上所有数字都是数字类型

console.log(typeof 100); // number
console.log(typeof -100); // number
console.log(typeof 10000); // number
console.log(typeof 0.00001); // number

科学计数法

极大或极小的数字可以通过科学(指数)计数法来书写

console.log(typeof 1e5); // number
console.log(typeof -21e3); // number

console.log(1e5); // 100000
console.log(-21e3); // -21000

NaN

NaN : not a number

NaN 是代表非数字值的特殊值,他本身是一个数据库类型,但是他表达出来是——不是一个数字

NaN 不是一个数字,但是返回的是一个数字类型的值

在数学运算中,如果无法返回一个数字,则会返回NaN 。

console.log(typeof 0 / 0); // NaN
console.log(typeof NaN); // number

NaN不自等

console.log(NaN == NaN); // false
console.log(NaN === NaN); // false

String 字符串类型

字符串是存储字符(比如 "hello world")的变量。

字符串可以是引号中的任意文本。

字符串要使用单引号或双引号包裹。

var a ="hello world";
var b ='你好';
var c = '';

字符串拼接

使用 + ,进行字符串的拼接

 var a = "我";
 var b = "爱";
 var c = "money";
    
 console.log(a + b + c); // 我爱money

在实际开发中,我们会经常把字符串与变量进行拼接

var age = 18;
var a = "我今年" + age + "岁了";
console.log(a);   // 我今年18岁了

字符串的长度

使用length属性 ,获取字符串的长度

空格也计算在长度里面

使用方法如下:

      var str1 = "abcdefghijklmnopqrstuvwxyz";
      console.log(str1.length); // 26

      var str2 = "好好学习,天天向上";
      console.log(str2.length); // 9

      var str3 = "";
      console.log(str3.length); // 0

charAt() 方法

使用此方法可以得到指定下标位置的字符

      var str = "hello world,你好 世界";
      console.log(str.charAt(0)); // "h"
      console.log(str.charAt(11)); // ","
      console.log(str.charAt(5)); // ""
      console.log(str.charAt(12)); // "你"

substring() 方法

substring(a,b) 此方法得到的是从a开始,到b结束(不包括b)的子串 ,a,b 是两个参数

      var str = "长风破浪会有时,直挂云帆济沧海";
      // substring(a,b), 得到的是从 a 开始, 到 b 结束(不包括 b)的子串
      console.log(str.substring(3, 5)); // "浪会"
      console.log(str.substring(10, 14)); // "云帆济沧"
      // substring(a,b), 如果省略第二个参数, 返回的子串, 会一直到字符串的结尾
      console.log(str.substring(5)); // "有时,直挂云帆济沧海"
      // substring(a,b), a 可以大于 b, 数字顺序, 会自动调整为小的数字在前
      console.log(str.substring(3, 5)); // "浪会"
      console.log(str.substring(5, 3)); // "浪会"

substr() 方法

substr(a,b) ,得到的是从a开始,长度为b的子串

      var str = "长风破浪会有时,直挂云帆济沧海";
      // substr(a,b), 得到从 a 开始, 长度为 b 的子串
      console.log(str.substr(1, 2)); // "风破"

      // substr(a,b), b 可以省略, 表示到字符串的结尾
      console.log(str.substr(6)); // "时,直挂云帆济沧海"
      console.log(str.substring(6)); // "时,直挂云帆济沧海"

      //   substr(a,b), a 可以是负数, 表示倒数的位置
      console.log(str.substr(-4, 4)); // "帆济沧海"
      console.log(str.substr(-4)); // "帆济沧海"

slice()

slice(a,b), 得到从 a 开始, 到 b 结束(不包括 b)的子串

      var str = "长风破浪会有时,直挂云帆济沧海";

      // slice(a,b), 得到从 a 开始, 到 b 结束(不包括 b)的子串

      console.log(str.slice(3, 5)); // "浪会"
      console.log(str.slice(10, 14)); // "云帆济沧"

      // slice(a,b)的参数 a, 可以是负数, substring(a,b)的参数 a, 不可以是负数, 如果是负数, 会被当成 0
      console.log(str.substring(-3, 5)); // "长风破浪会", -3 当成0
      console.log(str.slice(-3, 5)); // "", 从倒数第三个, 到正数第5个, 找不到

      // slice(a,b)中, a 的值必须小于 b 的值, 不然会找不到子串, substring(a,b), 会自动更换顺序
      console.log(str.substring(5, 3)); // "浪会" 自动替换顺序的结果
      console.log(str.slice(5, 3)); // ""

substring 和 slice 的区别

slice(a,b)的参数 a, 可以是负数, substring(a,b)的参数 a, 不可以是负数, 如果是负数, 会被当成 0

slice(a,b)中, a 的值必须小于 b 的值, 不然会找不到子串, substring(a,b), 会自动更换顺序

  var str = "长风破浪会有时,直挂云帆济沧海";
  // slice(a,b)的参数 a, 可以是负数, substring(a,b)的参数 a, 不可以是负数, 如果是负数, 会被当成 0
  console.log(str.substring(-3, 5)); // "长风破浪会", -3 当成0
  console.log(str.slice(-3, 5)); // "", 从倒数第三个, 到正数第5个, 找不到

  // slice(a,b)中, a 的值必须小于 b 的值, 不然会找不到子串, substring(a,b), 会自动更换顺序
  console.log(str.substring(5, 3)); // "浪会" 自动替换顺序的结果
  console.log(str.slice(5, 3)); // ""

toUpperCase, toLowerCase

toUpperCase(): 字符串转大写 toLowerCase(): 字符串转小写

// toUpperCase(): 字符串转大写
// toLowerCase(): 字符串转小写
console.log("hello world".toUpperCase()); // HELLO WORLD
console.log("HELLO WORLD".toLowerCase()); // hello world

indexof()

indexOf(), 返回某个指定子串, 在字符串中首次出现的位置,如果找不到,返回 -1

        console.log("我喜欢JS,我也喜欢HTML".indexOf("我")); // 0
        console.log("我喜欢JS,我也喜欢HTML".indexOf("喜欢")); // 1
        console.log("我喜欢JS,我也喜欢HTML".indexOf("JS")); // 3
        console.log("我喜欢JS,我也喜欢HTML".indexOf("HTML")); // 10
        console.log("我喜欢JS,我也喜欢HTML".indexOf("Java")); // -1

Boolean 布尔类型

布尔(逻辑)只能有两个值:true 或 false。

var a = true;
var b = false;

undefined 类型

一个没有赋值的变量,默认值是undefined

undefined 的类型也是 undefined , 也就是说undefined既是值 也是一种类型

Undefined 这个值表示变量不含有值

var a;
console.log(a); // undefined
console.log(typeof undefined); // undefined
console.log(typeof "undefined"); // string

null 类型

null 表示空,它是空对象

使用typeof检测结果是一个object

console.log(typeof null); // object

数据类型转换

其他类型转数字型

Number()

使用Number(),可以把任意数据类型转成数字型

纯数字字符串, 会变成数字, 不是纯数字的字符串, 会变成 NaN not a number

布尔值, true ==> 1, false ==> 0

undefined ==> NaN, null ==> 0

 console.log(Number("123")); // 123
 console.log(Number("123.4")); // 123.4
 console.log(Number("123年")); // NaN
 console.log(Number("2e3")); // 2000
 console.log(Number("")); // 0
 console.log(Number(true)); // 1
 console.log(Number(false)); // 0
 console.log(Number(undefined)); // NaN
 console.log(Number(null)); // 0

parseInt() 字符串转整数

parseInt() 可以把字符串, 转成整数

如果不是以数字开头,转成NaN

会自动截掉第一个非数字字符之后的所有字符

	console.log(parseInt("3.14")); // 3
	console.log(parseInt("3.14是圆周率")); // 3
	console.log(parseInt("圆周率是3.14")); // NaN
	console.log(parseInt("3.99")); // 3
	console.log(parseInt(3.99)); // 3
	console.log(parseInt(true)); // NaN
	console.log(parseInt(false)); // NaN

parseFloat()字符串转浮点数

截掉第一个非数字字符之后的所有字符

如果不是以数字开头,转成NaN

	console.log(parseFloat("3.14")); // 3.14
	console.log(parseFloat("123.456.789")); // 123.456
	console.log(parseFloat("3.14是圆周率")); // 3.14
	console.log(parseFloat("圆周率是3.14")); // NaN
	console.log(parseFloat("3.99")); // 3.99
	console.log(parseFloat(true)); // NaN
	console.log(parseFloat(false)); // NaN

其他类型转字符串

String()

String(), 可以把任意数据类型, 转成字符串

非十进制或者科学计数法会转成十进

	console.log(String(123)); // "123"
	console.log(String(123.4)); // "123.4"
	console.log(String(2e3)); // "2000"
	console.log(String(NaN)); // "NaN"
	console.log(String(Infinity)); // "Infinity"
	console.log(String(0xf)); // "15"

	console.log(String(true)); // "true"
	console.log(String(false)); // "false"

	console.log(String(undefined)); // "undefined"
	console.log(String(null)); // "null

toString()

toString(), 所有的值都有这个方法, 作用是把当前值转成字符串

效果和规则, 与 String()相同

String()和toString()很像不同之处在于使用

	console.log(true.toString()); // "true"
	console.log(String(true)); // "true"

	console.log((6).toString()); // "6"
	console.log(String(6)); // "6"

其他类型转布尔值

Boolean()

Boolean() 可以把任意数据类型, 转成布尔值

数字转布尔值, 0 和 NaN 会变成 false, 其他都是 true

字符串转布尔值, 空字符串会变成 false, 其他的都变成 true

undefined 和 null 转布尔值, 都会转成 false

	// 	数字转布尔值
	console.log(Boolean(123)); // true
	console.log(Boolean(0)); // false
	console.log(Boolean(NaN)); // false
	console.log(Boolean(Infinity)); // true
	console.log(Boolean(-Infinity)); // true
	
	// 字符串转布尔值
	console.log(Boolean("")); // false
	console.log(Boolean("abc")); // true
	console.log(Boolean("0")); // true
	console.log(Boolean("true")); // true
	console.log(Boolean("false")); // true
	
	// undefined 和 null 转布尔值
	console.log(Boolean(undefined)); // false
	console.log(Boolean(null)); // false