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