一、JS数据类型
(1). NaN、Infinity、parseInt()、isNaN()
NaN: 表示一个非数字(当一个数学表达式运算结果本该返回个数字却没有返回)
Infinity: 无穷大(除数是0时计算结果)
pareInt()函数: 将字符串转换成数字,且只取整数位(注意: 123.45啊啊 也可以取,但中文在前就不行)
isNaN()函数: 返回布尔类型,验证是否为一个数字(特点,首先会尝试将"数据"转换成数字)
console.log(2/0) //Infinity
console.log(0/0) //NaN
console.log(parseInt('123.45str')) //123
console.log(parseInt('str123.45')) //NaN
isNaN(123) //false
isNaN('123') //false
isNaN('Hello') //true
isNaN('2021/11/2') //true
isNaN() //true
isNaN("") //false
isNaN(" ") //false
isNaN(null) //false
isNaN('NaN') //true
isNaN(NaN) //true
isNaN(0/0) //true
(2). Boolean()函数
1、Boolean()函数:可将非布尔类型转换成布尔类型
2、在JS中if语句会自动调用Boolean()函数
这些值Boolean()都为false:0,null,undefiend,"",false,NaN
Boolean(0) //false
Boolean(null) //false
Boolean(undefined) //false
Boolean("") //false
Boolean(NaN) //false
Boolean(false) //false
Boolean(3) //true
Boolean(Infinity) //true
Boolean("abc") //true
Boolean(new Object()) //true
if("abc"){ //自动调用Boolean
console.log("test")
}
(3). String
substr(startIndex,length) 和 substring(startIndex,endIndex) 之间的区别
substr(2,3):从数组下标2开始,取3个长度
substring(2,3):从数组下标2开始,取到下标3(并且最后一位不截取)
console.log("abcdef".substr(2,3)) //cde
console.log("abcdef".substring(2,3)) //c
(4). Object
Object通用属性和方法
属性:prototype | constructor
方法:toLocaleString | toString | valueOf
重要:
1). prototype属性,可以给对象动态扩展属性和方法
var obj = new Object();
console.log(typeof obj)
//后期给Object类型的对象扩展一个doSome()方法
Object.prototype.doSome = function(){
console.log("测试prototype属性!!!")
}
2).defineProperty方法,可以给进行扩展、代理
let obj1 = {x:100}
let obj2 = {y:200}
Object.defineProperty(obj2,'x',{
get(){
return obj1.x
},
set(value){
obj1.x = value
}
})
(5). null NaN undefined 区别
typeof null : 结果是Object
三者类型不同,但是 null 和 undefined 的值可以等同
console.log(null === undefined); //false
console.log(null == undefined); //true
二、控制语句
for..in语句的使用:for(var x in arr)
1、若 arr 是数组,则 x 为数组下标 --> arr[x]
2、若 arr 是对象,则 x 为对象属性 --> arr[x](属性名是字符串)
var arr = [true,"abc",5,false,76,3.14];
//对普通数组进行for..in遍历: x就是数组下标
for(var x in arr){
console.log(x);
console.log(arr[x]);
}
Employee = function(empno,ename){
this.empno = empno;
this.ename = ename;
}
var e = new Employee(7369,"SMITH")
console.log(e.empno + "," + e.ename);
console.log(e['empno'] + "," + e["ename"]);
//for..in遍历对象的属性 --> x 就是对象的属性名,而且属性名是字符串
for(var x in e){
console.log(x);
console.log(typeof x); //String
console.log(e[x]); //正确的遍历属性值
// console.log(e.empno + "," + e.ename); //这种遍历方式就不成立了
}
3、注意理解 x in obj 对于对象中取值实质
//if判断语句中看出,若 x in obj:若对象obj中没有属性x,则为false,有则为true
if('liao' in {'liao':1}){
alert({'liao':1}['liao']) //1
}
三、JS内置对象
1、Array
创建数组:①.var arr = []; ②.var arr = new Array()
数组中元素类型可以不一样
数组长度可变
会自动扩容
var a = [];
console.log(a.length); //0
var a1 = [3.14,true,"str"]; //JS中的数组元素类型可以不一致
console.log(a1.length);
//没有扩容之前: [3.14,true,"str"]
//a1[100]会导致自动扩容: [3.14,true,"str",1,2,3,4,5,..........]
//JS中数组没有下标越界这一说!,本就不是开始指定数组容量
a1[100] = 1234;
console.log("数组的长度为:" + a1.length); //101
//另一种创建数组方式
var arr = new Array(0); //创建数组长度为0的数组
var arr1 = new Array(3); //创建数组长度为3的数组
JS中数组对象常用方法: push,pop,join,reverse 等
//pop:弹出数组中元素,从数组末尾开始弹出
var array = [1,2,3];
console.log(array.pop()); //3
console.log(array.pop()); //2
console.log(array.pop()); //1
console.log(array); //[]
//push:向数组中放入元素
console.log(array.push(1)); //1
console.log(array.push(2)); //2
console.log(array); //(2) [1,2]
var array1 = [1,5,65,6,67];
//翻转数组
array1.reverse();
//遍历
for(var x in array1){
console.log('@'+array1[x]); //67,6,65,5,1
}
//连接(将数组中的每一个元素以"$"连接成一个字符串)
var str = array1.join("$")
console.log(str); //67$6$65$5$1