JavaScript基础应用
1.实现字符串的反向输出
var s="abc"
s.split('').reverse().join('') -----> "cab"
知识点: String split()--> Array reverse() && join() --> String
2.Call和Apply用法及区别
都是实现将函数绑定到另一个对象上去执行,传参数列表类型不同。
F.apply(thisArg, [argArray] )
thisArg将代替F中的this对象,可以用来实现JS继承。
var A = {
content:1,
getContent: function(){
console.log(this.content)
}
}
A.getContent(); ==>1
var B = A.getContent;
B(); ===>undefined //因为this ->B B没有content变量
如何实现B()输出1? B.apply(A,null);//A将代替B中的this对象 this->A so 1
3.注意this变量的指向
function main(){
a = 1;
var a = 2;
this.a = 3;
}
main.a = 4;
main.prototype.a = 5;
var h = new main(); //当main被当成构造函数时,main()中的this指向新对象
console.log(main.a); ===>4 //this指向window
console.log(a); ===>3
console.log(this.a); ===>3
console.log(h.a); ===>3 //this指向h
delete h.a;
console.log(h.a); ===>5 //删掉对象属性后,会到原型里面去找
this的工作原理:
1.全局范围 this -->全局对象window
2.函数调用 this -->全局对象
3.方法调用 this -->当前调用对象
4.new foo(); 调用构造函数,this指向新创建的对象
5.call,apply this指向第一个参数对象
函数声明与变量声明会被javascript引擎隐式提升到当前作用域的顶部,但是只提升名称,不会提升赋值部分。
4.局部变量和全局变量
尽量使用局部变量,不用全局变量
(1)JS解析是从里到外,在效率上,局部变量会被优先访问到
(2)资源利用上来说,局部变量使用完成后会被释放,全局变量会耗费系统资源
如果在函数外部需要访问局部变量,肿么办?
这里就需要引入闭包。下面是一个简单的闭包例子:
function A(){
var a =1;
var B = function(){
return a++;
}
return B();
}
在函数外部:
var c = A(); ===> 1 c的值就是局部变量a的值
实现依次调用输出1,2,3...
闭包的优劣:
(1)定义内部变量,避免变量应用混论冲突
(2)但是需要在内存中维持一个变量,不会被释放,GC不会主动回收,会一直占用内存,如需释放,需要手动置值为null
5.Array 的 sort方法使用 传入排序函数 参数是 Function
var myArray = [1,'a', 'b', 3, 4, c]; //实现数字前字母后的输出
function compare(var1, var2){
if(isNaN(val1)){
return 1;
}else if(isNaN(val2)){
return -1;
}else{
return 0;
}
}
myArray.sort(compare); ===> [1, 3, 4, 'a', 'b', 'c']
6.js的基本数据类型和引用类型
基本类型:Number, Boolean, Null, Undefined, String
引用类型:Object, Function, Array, Date
js中的比较 用“===”
(1)Number 与String比较,String会转为Number
(2)Boolean与其他任何类型比较,Boolean都会转为Number
(3)Number/String与Object比较,都会转为Object类型
其他类型转为Boolean类型的规则:
1.undefined,null -> false
2.Boolean 只能作为布尔值
3.Number 0/NaN -> false,其他true
4.String ''->false,其他true
5.Object ->true
7.hasOwnProperty函数
这是唯一一个处理属性不查找原型链的函数,可以用来判断一个对象是否包含自定义属性而不是原型链上的属性
for(var i in foo){
if(foo.hasOwnProperty(i)){ //过滤掉那些非定义属性
console.log(i);
}
}
将值置为undefined/null都不会删除属性 delete 会真正删除属性
JavaScript基础应用的更多相关文章
- JavaScript基础
JavaScript基础 JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应的处 ...
- 一步步学习javascript基础篇(0):开篇索引
索引: 一步步学习javascript基础篇(1):基本概念 一步步学习javascript基础篇(2):作用域和作用域链 一步步学习javascript基础篇(3):Object.Function等 ...
- 前端之JavaScript基础
前端之JavaScript基础 本节内容 JS概述 JS基础语法 JS循环控制 ECMA对象 BOM对象 DOM对象 1. JS概述 1.1. javascript历史 1992年Nombas开发出C ...
- 一步步学习javascript基础篇(3):Object、Function等引用类型
我们在<一步步学习javascript基础篇(1):基本概念>中简单的介绍了五种基本数据类型Undefined.Null.Boolean.Number和String.今天我们主要介绍下复杂 ...
- Javascript基础回顾 之(三) 面向对象
本来是要继续由浅入深表达式系列最后一篇的,但是最近团队突然就忙起来了,从来没有过的忙!不过喜欢表达式的朋友请放心,已经在写了:) 在工作当中发现大家对Javascript的一些基本原理普遍存在这里或者 ...
- Javascript基础回顾 之(二) 作用域
本来是要继续由浅入深表达式系列最后一篇的,但是最近团队突然就忙起来了,从来没有过的忙!不过喜欢表达式的朋友请放心,已经在写了:) 在工作当中发现大家对Javascript的一些基本原理普遍存在这里或者 ...
- Javascript基础回顾 之(一) 类型
本来是要继续由浅入深表达式系列最后一篇的,但是最近团队突然就忙起来了,从来没有过的忙!不过喜欢表达式的朋友请放心,已经在写了:) 在工作当中发现大家对Javascript的一些基本原理普遍存在这里或者 ...
- JavaScript 基础回顾——对象
JavaScript是基于对象的解释性语言,全部数据都是对象.在 JavaScript 中并没有 class 的概念,但是可以通过对象和类的模拟来实现面向对象编程. 1.对象 在JavaScript中 ...
- javascript基础01
javascript基础01 Javascript能做些什么? 给予页面灵魂,让页面可以动起来,包括动态的数据,动态的标签,动态的样式等等. 如实现到轮播图.拖拽.放大镜等,而动态的数据就好比不像没有 ...
- javascript基础02
javascript基础02 1.数据类型 数据类型的描述在上篇的扩展中有写到链接 由于ECMAScript数据类型具有动态性,因此的确没有再定义其他数据类型的必要.这句话很重要. 如果以后再数据类型 ...
随机推荐
- UEBA 学术界研究现状——用户行为异常检测思路:序列挖掘prefixspan,HMM,LSTM/CNN,SVM异常检测,聚类CURE算法
论文 技术分析<关于网络分层信息泄漏点快速检测仿真> "1.基于动态阈值的泄露点快速检测方法,采样Mallat算法对网络分层信息的离散采样数据进行离散小波变换;利用滑动窗口对该尺 ...
- Python中文问题
读取数据库中文是?? 解决如下 一.python2版本需要在 文件的开头要加上编码设置来说明文件的编码 python3版本以上不需要 #encoding=utf-8 二.在连接数据的连接参数里加上字 ...
- Unity中UGUI鼠标穿透UI问题的解决方法
不过在使用时需要先获取两个红色显示的变量,graphicRaycaster和eventSystem. 这两个变量分别对应的是Canvas中的GraphicRaycaster组件和创建UI时自动生成的“ ...
- JAVA概率实现--一篇最常见、最通用解决方案
日常场景:某活动抽奖,控制各等奖的出现概率 比如控制A(中奖率):20%:B(获得优惠券率):30%:C(谢谢参与率):50% 下面以封装好在main()函数里,上代码(记得导入相应的包): publ ...
- Spring Data JPA 常用注解 @Query、@NamedQuery
1.@Transient @Transient表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性:如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则ORM框架 ...
- php网站速度性能优化(转)
一个网站的访问打开速度至关重要,特别是首页的打开加载过慢是致命性的,本文介绍关于php网站性能优化方面的实战案例:淘宝首页加载速度优化实践 .想必很多人都已经看到了新版的淘宝首页,它与以往不太一样,这 ...
- es6模块与 commonJS规范的区别
https://www.cnblogs.com/weblinda/p/6740833.html
- css布局与文档流的关系之float(浮动)
所谓文档流,指元素在排版布局的过程中,元素会自动从左到右,从上到下的流式排列.脱离文档流呢,就是元素打乱了这个排列,或是从排版中拿走. 说到文档流呢,我们先来说一下元素,每个元素呢,都有display ...
- java android 捕获未处理异常
1. 定义一个异常处理类 public class ExceptionHandler implements Thread.UncaughtExceptionHandler { public Excep ...
- redis的内存优化【转】
Redis所有的数据都在内存中,而内存又是非常宝贵的资源.对于如何优化内存使用一直是Redis用户非常关注的问题.本文让我们深入到Redis细节中,学习内存优化的技巧.分为如下几个部分: 一.redi ...