JavaScript自我学习路线
JavaScript数据类型
- JS中数据类型有原始类型和引用类型,ES6之前的数据类型有6种,ES6及之后的数据类型有7种,新添加的是symbol
- 这里以ES6为标准说明:
原始类型:Undefined、Number、String、Boolean、Null
引用类型:Object以及Object的子类 - typeof
JS中有一个运算符叫做typeof,这个运算符可以在程序的运行阶段动态的获取变量的数据类型
语法格式:
typeof 变量名
typeof运算符的运算结果是以下6个字符串之一,字符串全部小写:
“undefined”、“number”、“string”、“boolean”、“object”、“function”
一、Undefined
- Undefined类型只有一个值,这个值是undefined
当一个变量没有手动赋值,系统会默认赋值undefined,或者也可以给一个变量手动赋值undefined
二、Number
- Number类型包括的值:
整数、小数、正数、负数、NaN(不是数字)、Infinity(无穷)
1. NaN
- 表示Not a Number,不是一个数字,但属于Number类型
- 运算结果本来应该是一个数字,最后算完不是一个数字的时候,结果是NaN
2. isNaN()
- 语法格式:
isNaN(数据)
- isNaN结果是true表示不是一个数字;结果是false表示是一个数字
3. Infinity
- 当除数为0的时候,结果为无穷大
三、Boolean
- Boolean类型永远都只有两个值:true、false
1. Boolean()
- 语法格式:
Boolean(数据)
- Boolean()函数的作用是将非布尔类型转换成布尔类型
- 转换规则:
不为空的字符串,转换成true
非零的数字,转换成true
Infinity转换成true
null,undefined转换成false
简记“有则为true,无则为false”
四、Null
- null属于Null类型,但是typeof运算符的结果是"object"
var a = null;
alert(typeof a); // "object"
五、String
- 在JS当中,字符串可以使用单引号,也可以使用双引号
- 创建字符串对象:
// 第一种方式
var s = "abc";
// 第二种方式(使用JS内置的支持类String,可以直接使用,String的父类是Object)
var s = new String("abc");
- 小string与大String
// 小string(属于原始类型String)
var a = "abc";
alert(typeof a); // string
// 大String(属于Object类型)
var b = new String("abc");
alert(typeof b); // object
无论大String,还是小string,它们的属性都是通用的
- String常用属性:length、prototype、constructor
- String常用函数:
函数 | 函数说明 |
---|---|
indexof | 获取指定字符串在当前字符串中第一次出现处的索引 |
lastIndexof | 获取指定字符串在当前字符串中最后一次出现处的索引 |
replace | 替换,只替换一次 |
substr | 截取子字符串 |
substring | 截取子字符串 |
toLowerCase | 转换小写 |
toUpperCase | 转换大写 |
split | 拆分字符串 |
- substr与substring的区别
substr(startIndex,length)
alert("abcdef".substr(2,4)); // cdef
substring(startIndex,endIndex) // 不包含endIndex
alert("abcdef".substring(2,4)); // cd
六、Object
- Object类型是所有类型的超类,另外定义和自定义的任何类型默认继承Object,会继承其所有的属性和函数
- Object的属性:prototype(给类动态的扩展属性和函数)、constructor
- Object的函数:toString、valueOf、toLocaleString
1. JavaScript的类
- JS中定义类的语法
// 第一种
function 类名(形参){
}
第二种:
类名 = function(形参){
}
- JS中创建对象的语法
new 构造方法名(实参); // 构造方法名和类名一致
- 测试用例
function aBcd(){
}
// 把aBcd当作一个普通函数来调用
aBcd();
// 把aBcd当作一个类来创建对象
// new aBcd();
var obj = new aBcd(); // obj是一个引用,保存内存地址指向堆中的对象(JavaScript也有栈、堆的定义)
- 在JS中,类的定义和构造函数的定义是放在一起来完成的,即类的定义同时又是一个构造函数的定义
2. prototype
- prototype用来给类动态的扩展属性和函数
- 测试用例
String.prototype.lzj = function(){
alert("这是给String扩展的函数,函数名为lzj");
}
"qwesdada".lzj(); // 调用lzj函数
附: null,NaN与undefined
- null,NaN与undefined的区别:
数据类型不一样
null,NaN,undefined对应的数据类型为Null,Number,Undefined
alert(typeof null); // "object"==>特殊:null属于Null类型,但是typeof运算符的结果是"object"
alert(typeof NaN); // "number"
alert(typeof undefined); // "undefined"
- null,NaN与undefined的比较:
alert(null == NaN); // false
alert(null == undefined); // true
alert(NaN == undefined); // false
alert(null === NaN); // false
alert(null === undefined); // false
alert(NaN === undefined); // false
- 经比较,null和undefined可以等同
- JS中没有equals()方法比较,但是在JS中有两个比较特殊的运算符:“==”与“===”
==:等同运算符,只判断值是否相等
===:全等运算符,既判断值是否相等,又判断数据类型是否相等