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数据类型具有动态性,因此的确没有再定义其他数据类型的必要.这句话很重要. 如果以后再数据类型 ...
随机推荐
- STL 小白学习(3) vector
#include <iostream> using namespace std; #include <vector> void printVector(vector<in ...
- python scrapy同时执行spiders多个爬虫
假设spiders文件夹下多个文件: name.py name = 'name' name1.py name = 'name1' name2.py name = 'name2' . ...
- 网站压力测试工具http_load的安装与使用
一.安装 1.下载地址:http://www.acme.com/software/http_load/http_load-09Mar2016.tar.gz 2.解压后进入目录,执行make & ...
- LeetCode刷题 fIRST MISSING POSITIVE
Given an unsorted integer array,find missing postive integer. For example , Given [1,2,0]return 3, a ...
- 笨办法29IF语句
people = 20 cats = 30 dogs = 15 if people < cats: print "Too many cats! The world is doomed! ...
- centos7.3 64位 安装git
1.安装编译git时需要的包 # yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel # yum ins ...
- SpringBoot(四)thymeleaf+MyBatis+MySql
接着上一节 1.第一步:在pom文件中添加 <!-- MyBatis --> <dependency> <groupId>org.mybatis.spring.bo ...
- A New Function(LightOJ 1098)积性函数前缀和的应用
题意:要求对于1~n,每个数的约数(不包括1和其本身)的和. 题解:由于题目数据有2*10^9之大,因而不能直接暴力.需要考虑积性函数的特性,由于必定有重复的约数出现,因而可以对重复约数所在的区间进行 ...
- #学习笔记#jsp
jsp简介 JSP(Java Server Pages)是JavaWeb服务器端的动态资源,它与html页面的作用是相同的,显示数据和获取数据. jsp: 作为请求发起页面,例如显示表单.超链接. : ...
- 【java多线程】队列系统之说说队列Queue
转载:http://benjaminwhx.com/2018/05/05/%E8%AF%B4%E8%AF%B4%E9%98%9F%E5%88%97Queue/ 1.简介 Queue(队列):一种特殊的 ...