js笔记

https://github.com/biaochenxuying/blog/issues/12
重点
1.合并数组,最好不要使用Array.concat()
var array1=[1,2,3];
var array2=[4,5,6];
console.log(array1.concat(array2));
不适合合并大的数组,因为需要创建新数组,消耗内存。
使用Array.push.apply(arr1,arr2)来代替创建新的数组,
可以把第二个合并到第一个,减少内存

2.!!
0/null/""/NAN/undefined的时候才会返回false,
其他情况都返回true

3.+
只能作用于字符串数值,否则返回NAN
function toNumber(strNumber){
return +strNumber;
}
console.log(toNumber(“123”));
console.log(toNumber(“abc”));
console.log(+new Date());

4.if条件
if(token){
getUser();
}
可以通过&&操作符组合两个变量来缩短他
token&&getUser();

5.||短路表达式
如果第一个参数返回为false,第二个值为默认值,用来设置默认参数
function getUser(token){
var token=token||“XXXX”;
console.log(‘token’,token)
}
getUser(666);
getUser();

6.获取数组最后一个元素
var array=[1,2,3,4];
console.log(array.slice(-1));//[6];
console.log(array.slice(-1)[0]);//6
console.log(array.slice(-2));//[5,6]

7.打乱数组顺序
不适用Lodash等这些库打乱数组元素顺序,
var list = [1,2,3];
console.log(list.sort(function(){Math.random()-0.5}))

8.伪数组转换为真数组
var elements=document.querySelectorAll(“p”);
//NodeList 节点列表对象,但这个对象并不具有数组的全部方法,
如sort(),reduce(),map(),filter();

var arrayElements=[].slice().call(elements);
//转为数组了
var arrayElement=Array.from(elements);

9.截断数组
var arr=[1,2,3,45,5];
arr.length=2;
console.log(arr); //1,2,3

*********函数作用域
记住是函数定义时的作用域,不是引用时的作用域

var a=1;
var x=function(){
console.log(a);
}
function f(){
var a=2;
x();
}
f(); //1;
上述代码,函数x是在函数f外部声明的,所以他的作用域绑定外层,
内部变量a不会到函数体f体内取值,所以输出为1,而不是2;

总之,函数执行时所在的作用域,是定义时的作用域,而不是调用时所在的作用域。

很容易犯错的一点是,如果函数 A 调用函数 B,却没考虑到函数 B 不会引用函数 A 的内部变量。
var x = function () {
console.log(a);
};

function y(f) {
var a = 2;
f();
}

y(x)
// ReferenceError: a is not defined
上面代码将函数 x 作为参数,传入函数 y。但是,函数 x 是在函数 y 体外声明的,作用域绑定外层,因此找不到函数 y 的内部变量 a,导致报错。

同样的,函数体内部声明的函数,作用域绑定函数体内部。

function foo() {
var x = 1;
function bar() {
console.log(x);
}
return bar;
}

var x = 2;
var f = foo();
f() // 1
上面代码中,函数 foo 内部声明了一个函数 bar,bar 的作用域绑定 foo。当我们在 foo 外部取出 bar 执行时,变量 x 指向的是 foo 内部的 x,而不是 foo 外部的 x。正是这种机制,构成了 “闭包” 现象。

立即调用的表达式
(function(){}());
(function(){})();
分号是必须的

1.目的:不必命名函数,避免全局污染
2.内部形成单独作用域,可以封装一些外部无法读取的私有变量。

// 写法一
var tmp = newData;
processData(tmp);
storeData(tmp);

// 写法二
(function () {
var tmp = newData;
processData(tmp);
storeData(tmp);
}());

1.var student=[1,2,3]
var people=[];
people[0]=student;
console.log(people[0][0]);
//打印的值为1

2.关联数组
var student= [];
student[‘age’]=12;
student[‘name’]=‘guodi’;
var people=[];
people[0]=student;
console.log(people[0][“age”]);
people[‘name’]=student;
console.log(people[‘name’][‘name’])

3.局部变量和全局变量区别
函数内部如果使用了全局变量的名字,即便有局部变量,javascript也会被认为
引用全局变量

function square(num){
total = num*num;
return total;
}
var total = 50;
var number= square(20);
alert(total);

function square(num){
var total =num*num;
return total;
}
var total=50;
var number=square(20);
alert(total);

4.对象
对象里的数据可以通过属性、方法访问
属性是隶属于某个特定对象的变量
方法是只有某个特定对象的才能调用的函数
访问都是通过.访问

对象实例化使用new关键字
var student= new People();

DOM常用
getElementById、getElementsByTagName、getAttribute和setAttribute

getElementsByTagName()返回是对象数组
getElementById()返回是对象
节点中的每个都是一个对象

getAttribute()方法是一个函数,只有一个参数
setAttribute()允许对属性的节点做出修改

this关键字
1.在方法中,this指向所有者对象
2.在单独情况下,this指向全局对象
3.在函数中,this指向全局对象
4.在函数中,严格模式下,this是underfined
5.在事件中,this指向是接收事件的元素。

对象属性
使用for…in语句遍历对象的属性
为每个属性执行一次

添加属性
对象.属性名=‘值’;

添加方法
向对象添加方法是在构造函数内部完成的

this关键字
在JavaScript,被称为this的事物,指的是’拥有‘当前代码的对象
this的值,在函数中使用时,时“拥有”该函数的对象

call()和apply()之间的区别
call()方法分别接收参数
apply()方法接收数组形式的参数

JavaScript闭包
JavaScript变量属于本地或者全局作用域
全局变量能够通过实现闭包实现局部·

全局变量
函数能够访问函数内部定义的所有变量

鼠标事件
onmousedown,onmouseup,onclick

onload页面完成加载事件
onfocus输入字段获取焦点
鼠标事件

Dom事件监听器
addEventlistener()方法
element.addEventListener(event,function,useCapter);
第一个参数是事件的类型(比如’click’和mousedown)
第二个参数是当事件发生时我们需要调用的函数
第三个参数是布尔值,指定事件是事件冒泡还是事件捕获,此参数是可选的

向相同元素添加多个事件处理程序
addEventListener()方法允许向相同元素添加多个事件,同时不覆盖原有事件

也可以向相同元素添加不同类型的事件
element.addEventListener(“mouseover”,myFunction);
element.addEventListener(“click”,mysecondFunction);
element.addEventListener(“mouseout”,myThirdFunction);

向window对象添加事件处理程序
addEventListener()允许您将事件监听器添加到任何HTML DOM对象上,
比如HTML对象,window对象,比如XmlhttpRequest对象

window.addEventListener(“resize”,function(){
document.getElementById(“demo”).innerHTML=sometext;
})

事件冒泡还是事件捕获
Dom事件传播两种方法
事件冒泡和事件捕获
事件冒泡中,最里面的元素的事件会被首先处理,然后是外侧的
在捕获中,最外侧的元素的事件会首先被处理,然后是内侧的

addEventlistener(event,function,useCapture)
默认值是false,使用冒泡传播,如果该值为true,事件采用捕获传播

removeEventListener()方法

DOM根节点
document.body-文档的body
document.documentElement -完整文档

JavaScript对象
BOM浏览器对象
Window对象
全局变量是window对象的属性
全局函数是window对象的方法
甚至document对象也是window对象属性

窗口尺寸
这两个属性都以像素返回尺寸
window.innerHeight -浏览器窗口的内高度(以像素计)
window.innerWidth -浏览器窗口的内高度 (以像素计)

对于IE 8,7,6,5
document.documentElement.clientHeight
document.documentElement.clientWidth

document.body.clientHeight
document.body.clientWidth

窗口其他方法
window.open() -打开新窗口
window.close() -关闭当前窗口
window.moveTo() -移动当前窗口
window.resizeTo() -重新调整当前窗口

window.screen 对象包含用户屏幕的信息
属性:
screen.width 访问者屏幕宽度
screen.height 访问者屏幕高度
screen.availWidth 返回访问者屏幕的宽度,以像素计,减去窗口工具条
之类界面的特征。
screen.availHeight 属性返回访问者屏幕的高度,以像素计,减去诸如窗口
工具条之类的界面特征
screen.colorDepth 色深
screen.pixelDepth 用于返回屏幕像素深度

window.location对象可用于捕获当前页面地址url,并把浏览器
重定向到新的界面
window.location对象可以不带window前缀
window.location.href 返回当前页面的url
window.location.hostname 返回web主机的域名
window.location.pathname 返回当前页面的路径或文件名
window.location.protocol 返回使用的web协议 (http: 或https:)
window.location.assign 加载新文档

window.history对象包含浏览器历史
Window History
history.back() - 浏览器点击回退按钮
history.forward() -浏览器前进按钮

window.navigator 对象包含有关访问者的信息
navigator.appName 浏览器应用程序名称
navigator.appCodeName 浏览器的应用程序代码名称
navigator.platform 浏览器平台
navigator.appVersion 属性返回有关浏览器的版本信息
navigator.userAgent 属性返回浏览器发送到服务器的用户代理报头(user-agent header)
navigator不应该用于检测浏览器版本
navigator.language返回是浏览器操作语言
navigator.online,浏览器是否在线
navigator.javaEnabled()方法返回为true,如果java已启用

浏览器Cookie
navigator.cookieEnabled属性返回true,cookie已启用
否则返回false

alert(),confirm(),prompt()提示框

javascript Timing 事件(定时事件)
1.setTimeout(function,milliseconds)
在等待指定的毫秒数后执行函数
setInterval(function,milliseconds)
等同于setTimeout(),但持续重复执行该函数
setTimeout()和setInterVal()都属于HTML DOM Window 对象的方法

setTimeout()方法
第一个参数是要执行的函数
第二个参数指示执行之前的毫秒数

如何停止执行
clearTimeout();
clearInterval();
myVar = setTimeout(function, milliseconds);
clearTimeout(myVar);

javascript cookies 存储用户信息
cookies计算机小的文本文件中的数据
当web服务器向浏览器发送网页后,连接被关闭,服务器会忘记用户一切

Cookie是为了解决“如何记住用户信息”而发明的
当用户访问网页时,他的名字可以存储在cookie中
下次用户访问该页面,cookie会’记住’他的名字

通过JavaScript创建cookie
js可以通过document.cookie属性创建、读取、删除cookie
通过JavaScript,可以这样创建cookie
document.cookie=“username=Bill Gates”;

添加有效时间。浏览器关闭会删除cookie,添加path
document.cookie = “username = John Doe; expires= Sun, 31 Dec 2017 12:00:00 UTC;path=’/”;

通过JavaScript可以这样读取cookie
var x = document.cookie
删除cookie,指定path路径
document.cookie=“username=;path=/”

AJAX
特点:
不刷新页面更新网页
在页面加载后从服务器请求数据
在页面加载后从服务器接收数据
在后台向服务器发送数据

ajax仅仅组合了
内建的XMLHttpRequest对象(从web服务器请求数据)
JavaScript和HTML DOM(显示或使用数据)

工作:
浏览器(发生某个事件,创建XMLHttpRequest对象,发送HTTPRequest)
----》Internet----》服务器(处理HttpRequest,创建响应并将数据返回
浏览器)—》internet----》使用js处理被返回的数据,更新页面内容

1.网页中发生一个事件(页面加载、按钮点击)
2.由JavaScript创建XMLHttpRequest对象
3.XMLHttpRequest对象向web服务器发送请求
4.服务器处理该请求
5.服务器将响应发送回网页
6.由JavaScript读取响应
7.由JavaScript执行正确的动作(比如更新页面)

创建XMLHttpRequest对象
var xhttp;
if(window.XMLHttpRequest){
xhttp=new XMLHttpRequest();
}else{
//code for IE6,IE5
xhttp=new ActiveXObject(“Microsoft.XMLHTTP”);
}

XMLHttpRequest对象方法
1.new XMLRequest()创建新的XMLHttpRequest对象
2.abort() 取消当前请求
3.getAllResponseHeaders()返回头部信息
4.getResponseHeader() 返回特定的头部信息
5.open(method,url,async,user,psw)

规定请求:
method:请求类型GET或者POST
url:文件位置
async:true(异步)或false(同步)
user: 可选的用户名称
psw: 可选的密码

send()将请求发送到服务器,用于GET请求
send(string),将请求发送到服务器,用于post请求
setRequestHeader() 向要发送的报头添加标签、值对

XMLRequest对象属性
onreadystatechange 定义当readyState属性发生变化时被调用的函数
readyState
保存XMLHttpRequest的状态
0:请求未初始化
1.服务器连接已建立
2.请求已收到
3.正在处理请求
4.请求已完成且响应已就绪

responseText 以字符串返回响应数据
responseXML 以XML数据返回响应数据
status 返回请求的状态号
200 “OK”
403: “Forbidden”
404: “Not Found”

statusText: 返回状态文本(比如OK、NotFound)

缓存文件不是选项(更新服务器上的文件数据库)
向服务器发送大量数据(POST无大小限制)
发送用户输入(可包含未知字符),POST比GET更强大更安全

对象转为JSON
JSON.stringify(myObj);
将JSON转为对象
JSON.parse(myJSON);

//存储数据:
myObj = { name:“Bill Gates”, age:62, city:“Seattle” };
myJSON = JSON.stringify(myObj);
localStorage.setItem(“testJSON”, myJSON);

//接收数据:
text = localStorage.getItem(“testJSON”);
obj = JSON.parse(text);
document.getElementById(“demo”).innerHTML = obj.name;

JSON是JavaScript对象标记法
JSON是一种轻量级的数据交换格式
JSON具有自我描述性,易于理解
JSON独立于语言

JSONP无需考虑跨域问题,即可传送JSON数据的方法。
JSONP不使用XMLHttpRequest对象
JSONP使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值