ES6常用语法

后天就要交大论文绪论的,现在居然还在这写博客,YNB!

 

聊正事!什么是ES,ES就是ECMA Script,Javascript的语言标准,我们今天具体说下

一. let,const

我们主要关注下面几点:

  • let定义变量,const定义常量
  • 不能重复定义
  • 块级作用域
  • 不存在变量提升
//变量和常量
let r=2;
r=4;
console.log(r); //4

const pi = 3.1415926;
pi = 10; //报错



//不能重复定义(为了防止重复定义到时混乱)
var foo = 1;
var foo = 2;
console.log(foo); //2

let bar = 1;
let bar = 2;
console.log(bar); //报错



//块级作用域(块中的let在外部访问不到,var可以)
if(true){
    var test = 1;
}
console.log(test); //1

if(true){
    let test1 = 2;
}
console.log(test1); //报错



//块级作用域2
let arr = [1, 2, 3, 4];
for(var i = 0, iLength = arr.length; i<iLength; i++){
    //do nothing
}
console.log(i); //4

let arr = [1, 2, 3, 4];
for(let i = 0, iLength = arr.length; i<iLength; i++){
    //do nothing
}
console.log(i); //报错



//不存在变量提升(let)
console.log(foo);
var foo = 1; // undefined
//上面代码在编译时是一下顺序
//var foo;
//console.log(foo);
//foo = 1;

console.log(bar);
let bar = 1; //报错



 

二. 箭头函数

我们主要关注下面几点

  • 参数 => 表达式 / 语句;
  • 继承外层作用域
  • 不能用作构造函数
  • 没有prototype属性
//箭头函数
let value = 2;
let double = x => 2 * x;
let treble = x => {
    return 3 * x;
}
console.log(double(value));  //4
console.log(treble(value));  //6



//没有独立作用域
var obj = {
    commonFn : funcion(){
        console.log(this);     //this指向的是它的调用者obj
    },
    arrowFn : () => {
        console.log(this);    //因为箭头函数没有作用域,所以它与obj共享一个作用域,因为obj是在window作用域下,所以此函数也在windows下
    }
}
obj.commonFn();  //{commonFn: f, arrowFn: f}
obj.arrowFn();   //Window {postMessage: f, blur: f, focus: f, close: f, frames: window,...}



//不能用作构造函数
let Animal = function(){
}
let animal = new Animal();
animal  //Animal{}

let Animal = () => {
}
let animal = new Animal(); //报错



//没有prototype
let commonFn = function(){};
let arrowFn = () => {};
console.log(commonFn.prototype);  //{constructor: f}
console.log(arrowFn.prototype);  //undefined  

 

三. 模板字符串

  • 反引号标识 "
  • 支持多行字符串
  • 支持变量和表达式
//基本用法
let str = ·
<div>
    <h1 class="title">123</h1>
<div>
·;
document.querySelector('body').innerHTML = str;



//嵌套变量的用法
let name = 'Rosen';
let str = `
<div>
    <h1 class="title">${name}</h1>
<div>
`


//嵌套函数的用法
let getName = () => {
    return 'Rosen Test';
};
let str = `
<div>
    <h1 class="title">${getName()}</h1>
<div>
`


//循环嵌套
let names = ['Rosen', 'Geely', 'Jimin'];
let str = `
    <ul>
        ${
             names.map(name => `<li>Hi, I am ${name}</li>`).join('') //其中name是每次循环遍历出来的元素;join('')使用空格分隔遍历的数组
        }
    </ul>
`
document.querySelector('body').innerHTML = str;

 

四. Promise

  • Promise对象
  • 关键词:resolve,reject,then
new Promise((resolve, reject)=>{
    $.ajax({
        url : 'http://baidu.com',
        type: 'post',
        success(res){
            resolve(res);
        },
        error(err){
            reject(err);
        }
    })
}).then((res) => {
    console.log('success:', res);
},(err) => {
    console.log('error:', err);
});

 

五. 面向对象-类

  • 关键字:class
  • 语法糖,对应function
  • 构造函数
  • extends:类的继承
  • super:调用父类的构造函数
//类的构造函数
class Animal{
    constructor(){
        this.name = 'animal';
    }
    getName(){
        return this.name
    }
}

let animal = new Animal();
console.log(animal.getName());  //animal

class Animal{
    constructor(name){
        this.name = name;
    }
    getName(){
        return this.name
    }
}

let animal = new Animal('animal test');
console.log(animal.getName());  //animal test



//类的继承
class Animal{
    constructor(){
        this.name = 'animal';
    }
    getName(){
        return this.name
    }
}

class Cat extends Animal{
    constructor(){
        this.name = 'cat';
    }
}

new Cat()  // 报错(因为继承的子类里面是没有this的,所以要想this指针,则需要加一句super())




class Animal{
    constructor(){
        this.name = 'animal';
    }
    getName(){
        return this.name
    }
}

class Cat extends Animal{
    constructor(){
        super();
        this.name = 'cat';
    }
}

let animal = new Animal();
let cat = new Cat();
console.log(animal.getName())  //animal
console.log(cat.getName())  //cat




//对象的用法
//老的用法
var name = 'Rosen',
    age  = 18;
var obj = {
        name: name,
        age: age,
        getName: function(){
            return this.name;
        }
        getAge: function(){
            return this.age;
        }
}

//新的用法
let name = 'Rosen',
    age  = 18;
let obj = {
        // 变量名可以直接用作对象的属性名称
        name,
        age,
        //对象里的方法可以简写
        getName(){
            return this.name;
        },
        //表达式作为属性名或方法名
        ['get' + 'Age'](){
            return this.age;
        }
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值