let /var
let / var //let在当前,var是在windows
不给 let var 的情况下默认var
var b=200 === windows.b=200 === this.b=200;
var 和function提升
console.log(a)//函数的提升更高,程序运行中会为函数开辟栈
var a=100;
function a(){
}
数组:
reduce
sort
//排序
sort(function(a,b){
return a-b;
})
//打乱
sort(function(a,b){
return Math.random()>0.5;
})
构造函数(原型对象)
抽象: 建模的过程 (铸模)将食物的特征提炼并归纳到一起
实体:以抽象为模板出来的实例
构造函数:对对象生成的一个实例
Object
let obj={x:100,y:200} //new object()
//Student可以看做一个类
function Student(name,age,sex){//构造函数名首字母大写
//在内部使用了this关键字
this.name = name;
this.age=age;
this.sex= sex;
this.introduce1=function(){
console.log(My Name Is ${this.name}
);//反引号,美元符号{}
}
}
//构造函数的原型对象(共享给实例,不会被赋值,节约空间)prototype
Student.prototype.introduce2=function(){
console.log(My Name Is ${this.name}
);//反引号,美元符号{}
}
//使用new关键字调用
let stu1=new Student(‘AA’,20,‘man’);
//等同于 {name: age: sex}
let stu2=new Student(‘BB’,30,‘women’);
let stu3={name:‘CC’,age:30,sex:‘men’};
console.log(stu1,stu2,stu3);
stu1.introduce1();
stu2.introduce1();
//函数不是共享,造成资源的浪费
console.log(stu1.introduce1=stu2.introduce1);
console.log(stu1.introduce2=stu2.introduce2);
console.log(stu1.proro,stu1.introduce1);
//对象和构造函数
//实例的原型:proro === 构造函数的原型对象
c语言中结构体的字节占用
struct a{
char level;1
int age;4
char sex;1
float score;4
double gorad:8
}//24个
创建一对象
1,创建一个模板(上面的Student例子);
2,对象的扩展,原型链
var s1={
name:‘aa’,
age:‘30’,
}
//原型链
//以一个现成的对象为原型,创建一个新的对象
let s2=Object.create(s1);
s2.sex=‘nan’;
console.log(s2);
let s3=Object.create(s2);
s3.gold=1000;
let s4=Object.create(s3);
s4.name1=‘caixukun’;
console.log(s4);
原生对象:、
包装对象:Number,Boolean,String//
var a=5;//定义的变量可以当做一个number类型的对象
a.toString()
instanceof()//判断莫一个对象那个是否属于一个对象
console.log(‘abc’ instanceof string);
Array:构造数组
let arr=[1,2,34];//一般使用第一种办法,比较适合书写习惯
let arr1=new Array(1,2,45);//直接赋值
let arr2=new Array(5)//代表数组的长度,5个空位 如果访问默认Undefined
//如果一个数组位置的值初始为undefined不会是空位
arr2[2]=undefined;
//空位的是undefined,值为undefined元素不是空位
Date;时间
1时间戳:19701.1.00经过的毫秒数
function f(){//一秒等于1000毫秒
let startTime=(new Date()).getTime();
let count=0;
while(count<10000000){
count++;
}
let endTime=(new Date()).getTime();
console.log(endTime-startTime,count);
}
f();
JSON
1,键名必须是字符串
2,如果值是引用类型,只能是数组或对象,如果是数字类型,只能是十进制,undefined不可以作为值使用。
JSON,toString()
//将对象转为JSON字符串
var obj1={x:100,y:200};
//先转成字符串,再解析
var obj2=JSON.parse(JSON.stringify(obj1));//深拷贝
obj2.y=300;
console.log(obj1,obj2);
正则表达式
RegExp:主要用于字符串的匹配
let reg=/abc/;
let str=‘abcdefg’;
console.log(str.match(reg));
let num=“sa4354fdsf6rgd667”;
// /\d /\d/g /d+/g /d:转义符
// /[a-zA-z]+/g //找出所有的字母 +贪心法则
作业:检测
let arr=[1,2,3,4,5,6,7,8,9];
//输出为[1,2,3]
[4,5,6]
[7,8,9]
理解:
forEcach只能用在数组上使用,字符串使用需要的方法
//字符串使用ForEach
console.log([].forEach.call(‘1,23,4,5’,function(e){
console.log(e+‘yes’);
}));
//鸭子类型
//y鸭子
function Dark(name){
this.name=name;
this.voice=“ga ga ga”;
}
Dark.prototype.cry=function(){
console.log(this.voice);
}
//狗
function Dog(name){
this.name=name;
this.voice="wang wang wang ";
}
Dog.prototype.cry=function(){
console.log(this.voice);
}
function animalcry(obj){//忽略对象的类型
obj.cry();
}
let t=new Dark(“tang”);
let d= new Dog(“wangsicong”);
t.cry();
d.cry();
//如何改变this的指向 call
d.cry.call(t);//call(传入的对象) dar内部也必须有一个this的指向
//函数 f 需要一个参数parm f 属于对象OBJ
//有另一个对象铂金,希望借调f
//写法为 object。f.call(obj2,parm)
//apply
//用call
let obj1={
tag :1000,
f:function(a,b){
return this.tag +a +b;
}
}
let obj2={
tag:2000,
}
console.log(obj1.f(3,4));//自己调自己的函数
console.log(obj1.f.call(obj2,3,4));//借被人的函数调用
//用apply
console.log(obj1.f.apply(obj2,[3,4]));//必须以数组的形式传参
//用bind
let f=obj1.f.bind(obj2);//直接吧f绑定到obj2
console.log(f(3,4));//绑定