JS基础学习06

面向对象的特性:封装、继承、多态(抽象性)

JS是一门什么样的语言?

1.是一门弱类型的语言
2.是一门脚本语言
3.是一门弱类型的语言
4.是一门基于对象的语言
5.是一门动态类型的语言

对象

1.有属性和方法,具体特指的某个事物------>属性:特征;方法:行为;
2.JS中是一组无序的属性的集合

创建对象的方式

1.通过调用系统构造函数创建对象   new Object();
	var obj = new Object();
2.自定义构造函数创建对象
	var obj2 = new 自定义构造函数();
3.字面量的方式创建对象
	var obj3 = {};
	变量instanceof 对象-------->布尔类型,判断对象是不是这个类型
4.JSON类型的数据,都是键值对,成对的数据---(格式化后的一组数据,方便传输)
	var obj4 = {
		name = “小明”,
	};
	var json = {
		"name":"小明",
	};

对象设置属性值的写法

对象.属性名 = 值;	---点语法
对象["属性的名字"] = 值

对象获取属性的写法

对象.属性
对象["属性"]

遍历对象

for(var key in 对象){
	//key是一个变量,存储了遍历对象的属性的名字
}

基本类型和复杂类型

原始数据类型:number、string、boolean、null、undefined、object
基本类型(简单/值数据类型):number、string、boolean、null、undefined、object
复杂数据类型(引用类型):object
空类型:undefined、null

基本类型的值在栈上
复杂类型的对象在堆上,地址(引用)在栈上

值类型之间传递的是值
引用类型之间传递的是引用(地址)

对象分类

内置对象、自定义对象、浏览器对象
内置对象:系统提供的
自定义对象:自己写的
浏览器对象:浏览器的

Math是一个对象,但不是一个函数
Math对象下的属性和方法都是静态的
	常用方法:
		Math.ceil()----向上取整、Math.floor()----向下取整
		Math.Pi----圆周率
		Math.max()、Math.min()、Math.abs()(绝对值)、
		Math.random、Math.sqrt();(开方)、Math.pow();(次幂)

new的执行过程

1.开辟空间,存储新的对象
2.把this设置为当前对象
3.设置对象的属性和方法
4.返回当前的新对象

内置对象

Math、Date、Array、String

自定义实现max
	 function myMath(){
        this.getMax = function(){
            var max = arguments[0];
            for(var i=0;i<arguments.length;i++){
                if(max<arguments[i])
                {
                    max = arguments[i];
                }
            }
            return max;
        };
    };
    var mm = new myMath();
    var result = mm.getMax(23,53,62,45,19,38,79,45);
    console.log(result);
    --------------------------------------
随机十六进制颜色值
	 function getRandomColor(){
            var str = "#";
            var arr = ["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"];
            for(var i=0;i<6;i++)
            {
                var num = parseInt(Math.random()*16);
                str += arr[num];
            }
            return str;
        };

Date对象

创建 Date 实例用来处理日期和时间。Date 对象基于1970年1月1日(世界标准时间)起的毫秒数。
var date = new Date();/Date("2018-10-10");/Date("2018/10/10");
var date = new Date.now();			//毫秒

常用方法介绍:
	var dt = Date();
	console.log(dt.getFullYear());		//获取年
	console.log(dt.getMonth());			//获取月/从0开始-11
	console.log(dt.getDate());			//获取日期
	console.log(dt.getHours());			//获取小时
    console.log(dt.getMinutes());   	//获取分
    console.log(dt.getSeconds());  		//获取秒
    console.log(dt.getDay());       	//获取星期//从0开始
	console.log(dt.toDateString());	    //英文格式--日期
    console.log(dt.toLocaleDateString());    //数字格式--日期
    console.log(dt.toTimeString());    		 //小时
    console.log(dt.toLocaleTimeString());  	 //小时
    console.log(dt.valueof());				 //毫秒值

	var dt =+new Date(); 	//特殊写法,只适用于Date对象

格式化输出日期:
	function getDate(){
            var dt = new Date();
            var year = dt.getFullYear();
            var month = dt.getMonth()+1;
            var date = dt.getDate();
            var day = dt.getDay();
            var hour = dt.getHours();
            var minutes = dt.getMinutes();
            var second = dt.getSeconds();

            month =  month<10?"0"+month:month;
            date = date<10?"0"+date:date;
            hour = hour<10?"0"+hour:hour;
            minutes = minutes<10?"0"+minutes:minutes;
            second = second<10?"0"+second:second;
            switch(day){
                case 1:day = "星期一";break;
                case 2:day = "星期二";break;
                case 3:day = "星期三";break;
                case 4:day = "星期四";break;
                case 5:day = "星期五";break;
                case 6:day = "星期六";break;
                case 0:day = "星期日";break;

            };
            var str = year+"年"+month+"月"+date+"日"+"  星期:"+day+"  "+hour+":"+minutes+":"+second;
            return str
        };
    var str = getDate();
    console.log(str)

String-字符串对象

全局对象是一个用于字符串或一个字符序列的构造函数。
可以看成一个字符组成的数组--->可以for循环遍历,但JS里没有字符类型

特性:
	不可变性--字符串的值不可改变--(但可以重新赋值-更改地址指向)
常用属性:
	.length---获得字符串长度
实例方法
必须要通过new的方式创建的对象(实例对象)来调用的方法
静态方法
直接通过大写的构造函数的名字调用的方法(直接通过大写的对象的名字调用的方法)

String 常用方法

1.str.charAt(索引);		
	从一个字符串中返回索引位置的字符,超出索引结果为空。
2.String.fromCharCode(num1, ..., numN) 	
	根据ASCII表,返回对应字符/字符串
3.str.concat(string2, string3[, ..., stringN]) 	
	将一个或多个字符串与原字符串连接合并,形成一个新的字符串并返回。
4.str.indexOf("字符串",开始查找位置)
	返回调用函数的字符串对象中第一次出现的指定字符(串)的索引,开始在 fromIndex位置往右进行搜索。如果未找到该值,则返回-1。
5.str.lastIndexOf(字符串) 
	与indexOf相反,从末尾开始找
6.str.replace(字符串,替换字符串)
	该方法并不改变调用它的字符串本身,而只是返回一个新的替换后的字符串。
7.str.slice(起始位置,结束位置) 		//不包括结束位置字符
	提取一个字符串的一部分,并返回一新的字符串
8.str.split(“要干掉的字符”,(切割后留下的字符串))
	使用指定的分隔符字符串将一个String对象分割成字符串数组
9.str.substr(开始位置,字符个数)
	返回一个字符串中从指定位置开始到指定字符数的字符。
10.str.substring(起始位置,结束位置)
	返回一个字符串中从指定位置开始到指定位置结束的字符子集。
11.str.toLocaleLowerCase() // str.toLowerCase();
	字符串转小写
12..str.toLocaleUpperCase() // str.toUpperCase();
	字符串转大写
13.str.trim()
	去字符串两端空格
String案例
 // 统计字符串中每个字符出现的次数
    var str = "sdfvekavnvuoya,cvzxlpwejdfuiwegbvjknq";
    str.toLocaleLowerCase();
    var obj = {};
    for(var i=0;i<str.length;i++){
        var key = str[i];
        if(obj[key]){
            obj[key]++;
        }else{
            obj[key] = 1;
        }
    }
    for(key in obj){
        console.log(key+"在这个字符串中出现了"+ obj[key]+"次");
    }

Array-数组对象

Array对象是用于构造数组的全局对象,数组是类似于列表的高阶对象
创建方式:
	构造函数: var arr = new Array();
	字面量:var arr = ["ddd","dfff"];
Array对象常用方法
1.Array.isArray(obj)		console.log(obj instanceof Array)	true/false
	用于确定传递的值是否是一个 Array。
2.var new_array = old_array.concat(数组1,数组2,...)
	用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。
3.arr.every(callback[, thisArg])	--->用于筛选
	callback 被调用时传入三个参数:元素值、元素索引、原数组
	示例:
		var arr = [1000,2000,3000];
		a-->元素的值
		b-->索引的值
		c-->调用方法者
		var flag = arr.every(function(a,b,c){
			console.log(a+"==="+b+"==="+c);
			return a>2000;//数组中所有元素都大于2000,返回true
		});
		console.log(flag); --->true/false
	返回值是boolean类型,函数作为参数使用,函数有三个参数;
	若调用数组中的每个元素都符合条件,则返回true;
	测试数组的所有元素是否都通过了指定函数的测试。
4.var new_array = arr.filter(callback(element[, index[, array]])[, thisArg])
	var arr = [10,20,30,40,50,60,70,80];
	var newArr = arr.filter(function(ele){
		return ele>0
	});
	返回值是一个新数组,函数作为参数使用,函数有三个参数(元素的值、索引的值、调用者);
	若调用数组中有元素符合条件,返回新数组包含符合元素;
!!5.arr.push(元素);
	追加元素到数组最后,返回值是追加数据后的数组长度
!!6.arr.pop();
	删除数组最后一个元素,返回值为删除的元素
!!7. arr.shift()
	删除数组中第一个元素,返回值为删除的元素
!!8.arr.unshift();
	向数组的第一个元素前插入一个新元素,返回值是插入后数组的长度
9.arr.forEach(callback[, thisArg]);
	var arr = [10,20,30,40];
	arr.forEach(function(ele,index){
		console.log(ele+"===="+index);
	});		
	遍历数组、相当于for循环
10.arr.indexOf(元素值);
	返回元素在数组中的索引,若没有返回-1;
11.arr.join("字符串");
	往数组元素间添加元素,l连成字符串	返回值是字符串
12.arr.map(函数);
	数组中每个元素都将执行该函数,并将结果放于新数组中返回
13.arr.reverse();
	数组反转
14.arr.sort([compareFunction]);
	a---->arr[i]
	b---->arr[i+1]
	arr.sort(function(a,b){		//升序
		if(a>b){
			return 1;
		}else if(a=b){
			return 0;
		}else{
			return -1;
		}
	});
	数组排序
15.arr.slice(begin, end);
	返回一个新的数组对象,这一对象是一个由 begin和 end(不包括end)决定的原数组的浅拷贝。原始数组不会被改变。-------浅拷贝
16.arr.splice(位置索引,0/1,“字符串”);
	在数组指定位置插入或替换为指定字符串
基本包装类型
普通变量不能调用属性和方法
对象可以直接调用属性和方法

var str = "hello";
str = str.replace("ll","HH");  --->系统自动 var str = new String("hello");
console.log(str);----->heHHo;

var flag = new Boolean(false);
var result = flag&&true; //如果是对象&&true---》true//如果是true&&对象--》对象
console.log(result);			------>true

var num = 10;
var num2 = Number("10");	//类型转换
var num3 = new Number("10");	//基本包装类型

基本包装类型:本身是基本类型,但在执行代码的过程中,如果这种类型的变量调用了属性或方法,则转为基本包装类型,变量转为基本包装对象

猜你喜欢

转载自blog.csdn.net/weixin_42966943/article/details/88065906