工厂函数创建对象new Object():
function createPerson(name,age,sex){
var person = new Object();
person.name = name;
person.age = age;
person.sex = sex;
person.sayHi = function(){
console.log("helllo");
};
return person;
}
var p1 =createPerson("zs",18,true);
var p2 =createPerson("ls",19,false);
console.log(p1);
console.log(p2);
{name: "zs", age: 18, sex: true, sayHi: ƒ}
{name: "ls", age: 19, sex: false, sayHi: ƒ}
自定义构造函数创建对象(this替代):
function Person(name,age,sex){
// 函数名首字母大写
// 不需要使用new
// 用this替代将来创建的新对象
this.name = name;
this.age = age;
this.sex = sex;
this.sayHi = function(){
console.log("helllo");
};
// 不需要添加return
}
// 用new关键字调用构造函数
var p1 = new Person ("zs",18,true);
console.log(p1);
Person {name: "zs", age: 18, sex: true, sayHi: ƒ}
遍历对象:
var person1 = {
name:"zs",
age:18,
sex:"male",
sayHi:function(){
console.log(this.name + "您好");
}
};
// 遍历对象
for (var k in person1){
console.log(k+person1[k]);
}
namezs
age18
sexmale
sayHifunction(){
console.log(this.name + "您好");
}
栈和堆:
[if !supportLists]1、[endif]栈(操作系统):由操作系统自动分配释放,存放简单数据类型(函数的参数值,局部变量的值等)
[if !supportLists]2、[endif]堆(操作系统):存储复杂类型(对象),一般由程序员分配释放,若程序员不释放,由垃圾回收机制回收
// 基础数据类型
var a = 5;
var b = a; //将a内部存储的数据5复制了一份给了b
a = 10;
console.log(a);
console.log(b);
// 复杂数据类型
var p1 ={
name : "zs",
age : 18,
sex : "male"
};
var p = p1;
// p1将内部存储的指向对象原型的地址复制给了p
// 两个变量之间是一个联动的关系,一个变化,会引起另一个变化
p.name ="ls";
console.log(p);
console.log(p1);
// 数组和函数存储在变量中时,也是存储地址
var arr = [1,2,3,4]
var arr2 = arr;
arr[4]=5;
console.log(arr);
console.log(arr2);
10
5
{name: "ls", age: 18, sex: "male"}
{name: "ls", age: 18, sex: "male"}
(5) [1, 2, 3, 4, 5]
(5) [1, 2, 3, 4, 5]
MDN:https://developer.mozilla.org/zh-CN/
console.log(Math.random());
Math.PI 圆周率
Math.random() 生成随机数
Math.floor()/Math.ceil() 向下取整/向上取整
Math.round() 取整,四舍五入
Math.abs() 绝对值
Math.max()/Math.min() 最大值/最小值
Math.sin()/Math.sin() 正弦/余弦
Math.pow()/Math.sqrt() 求指数次幂/求平方根
得到一个两数之间的随机整数:
function getRandomInt(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min)) + min; //不含最大值,含最小值
}
检测某个实例对象是否属于某个对象类型:
var arr2 = new Array("zs","ls","ww");
var a = {};
function fun(){
console.log(1);
}
console.log(arr2 instanceof Array);
console.log(a instanceof Array);
console.log(fun instanceof Function);
true
false
true
数组方法-首尾操作方法:
// 尾推
var arr = [1,2,3,4];
console.log(arr.push(5,6,7,8));
console.log(arr);
// 尾删,删除最后一项数据
// 不需要传参
console.log(arr.pop());
console.log(arr);
// 首删,删除第一项数据,不需要传参
console.log(arr.shift());
console.log(arr);
// 首添,参数与push方法类似
console.log(arr.unshift(-1,0));
console.log(arr);
8
(8) [1, 2, 3, 4, 5, 6, 7, 8]
8
(7) [1, 2, 3, 4, 5, 6, 7]
1
(6) [2, 3, 4, 5, 6, 7]
8
(8) [-1, 0, 2, 3, 4, 5, 6, 7]
// 将数组的第一项移动到最后一项
// 删除第一项
// 将删除的项添加到最后一项
var arr = [1,2,3,4];
arr.push(arr.shift());
console.log(arr);
[if !supportLists](4) [endif] [2, 3, 4, 1]
数组方法-合并方法concat():
将两个数组合并成一个新的数组,原数组不受影响。参数位置可以是一个数组字面量、数组变量、零散的值
var arr = [1,2,3,4];
// 参数:数组、数组的变量、零散的值
// 返回值:一个新的拼接后的数组
var arr1 = arr.concat([5,6,7]);
var arr = [8,9,10];
var arr1 = arr.concat(ar);
var arr1 = arr.concat(11,12,13);
console.log(arr);
console.log(arr1);
数组方法-拆分方法slice(start,end):
[if !supportLists]1、[endif]从当前数组中截取一个新的数组,不影响原来的数组,返回一个新的数组,包含从start到end(不包含该元素)的元素
[if !supportLists]2、[endif]参数区分正负,正值表示下标位置,负值表示从后面往前数第几个位置,参数可以只传递一个,表示从开始位置截取到字符串结尾
// 拆分方法
// 参数为正
var arr1 = arr.slice(3,7);
console.log(arr);
console.log(arr1);
(10) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
(4) [4, 5, 6, 7]
// 参数为负
var arr1 = arr.slice(-7,-1);
console.log(arr);
console.log(arr1);
(10) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
(6) [4, 5, 6, 7, 8, 9]
// 只写一个参数
var arr1 = arr.slice(7);
console.log(arr);
console.log(arr1);
(10) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
(3) [8, 9, 10]
数组方法-splice
删除、插入、替换:
splice(index,howmany,element1,element2,...)
用于插入、删除或替换数组的元素
index:删除元素的开始位置
howmany:删除元素的个数,可以是0
element1,element2:要替换的新的数据
var arr = [1,2,3,4,5,6,7,8,9,10];
// 删除功能,传前两个参数
console.log(arr.splice(2,5));
console.log(arr);
(5) [3, 4, 5, 6, 7]
(5) [1, 2, 8, 9, 10]
// 替换功能,传3个及以上的参数
arr.splice(2,5,"hello","dog");
console.log(arr);
[if !supportLists](7) [endif] [1, 2, "hello", "dog", 8, 9, 10]
// 插入功能,传3个及以上的参数,但是第二个参数必须为0
arr.splice(2,0,"hello");
console.log(arr);
[if !supportLists](11) [endif] [1, 2, "hello", 3, 4, 5, 6, 7, 8, 9, 10]
indexOf/lastIndexOf
var arr = [1,2,3,4,5,6,7,8,9,10,4,5];
// 查找某个元素在数组中从前往后第一次 出现位置的下标
console.log(arr.indexOf(4));
// 查找某个元素在数组中从前往后最后一次 出现位置的下标
console.log(arr.lastIndexOf(4));
console.log(arr.lastIndexOf(16));
3
10
-1
数组方法-倒序和排序:
var arr = [1,2,3,4,5,6,7,8,9,10];
// 倒序排列
console.log(arr.reverse());
console.log(arr);
(10) [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
(10) [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
// 排序,默认按照字符编码顺序从小到大排列
// 添加一个比较函数的参数
var arr = [1,2,3,4,5,6,7,8,9,10,20,30];
arr.sort(function(a,b){
if(a>b){
return -1;
}
else if(a<b){
return 1;
}
else {
return 0;
}
})
console.log(arr);
[if !supportLists](12) [endif] [30, 20, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
// 转字符串方法
var str = arr.join("");
console.log(str);
123456789102030
清空数组:
[if !supportLists]1、[endif](推荐)arr=[];
[if !supportLists]2、[endif]arr.length=0;
[if !supportLists]3、[endif]arr.splice(0,arr.length);
字符串方法:
var str = "这是一个普通的字符串,abc, %^&";
// 长度属性
console.log(str.length);
// charAt()返回指定下标位置的字符
console.log(str.charAt(6));
// indexOf()返回子串在原始字符串中第一次出现位置的下标
console.log(str.indexOf("字符串"));
// concat()字符串拼接
var str2 = str.concat("好的","再见");
console.log(str);
console.log(str2);
// split()分割字符串成一个数组
var arr = str.split("");
console.log(arr);
21
的
7
这是一个普通的字符串,abc, %^&
这是一个普通的字符串,abc, %^&好的再见
[if !supportLists](21) [endif] ["这", "是", "一", "个", "普", "通", "的", "字", "符", "串", ",", "a", "b", "c", ",", " ", " ", " ", "%", "^", "&"]
// split()分割字符串成一个数组
var arr = str.split(",");
console.log(arr);
[if !supportLists](3) [endif] ["这是一个普通的字符串", "abc", " %^&"]
// 字符串内容倒置
// var arr = str.split("");
// arr.reverse();
// str = arr.join("");
str = str.split("").reverse().join("");
console.log(str);
// 三种截取字符串方法:
// slice(start,end)从开始位置截取到结束位置,但是不包含结束位置
var str1 = str.slice(3,7);
var str1 = str.slice(-7);
// substr(start,howmany)从开始位置截取一定长度
var str2 = str.substr(3,7);
var str2 = str.substr(-9);
// substring(start,end)参数必须是整数,比较两个数的大小,小的作为开始,大的作为结束
var str3 = str.substring(3,7);