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数据类型具有动态性,因此的确没有再定义其他数据类型的必要.这句话很重要. 如果以后再数据类型 ...
随机推荐
- c# 转换成时间类型
if (rngFound.Value.ToString().Contains("/")) { closingdate = rngFound.Value; } else if (rn ...
- 分布式监控系统(类zabbix)
目录: 为什么要做监控? 监控系统业务需求分析: 监控系统架构设计: 监控系统表结构设计: 一.为什么要做监控系统? 市面上已经有很多成熟的监控系统,例如zabbix.nagios,为什么自己开发监控 ...
- PHP socket服务端与客户端的简易通信
今天学习socket通信的同时,顺便整理了下以前初识socket的知识. 现在关于php的socket通信,有些框架已经十分成熟了,比如 swoole 和 workerman,这两个大家可以学习学习 ...
- python魔术方法(__init__,__call__,被双下划线包围的方法)
转载link:http://pycoders-weekly-chinese.readthedocs.io/en/latest/issue6/a-guide-to-pythons-magic-metho ...
- 补码的来源以及为什么byte的最小值是-128
1. 有符号数和无符号数 我们的实数分为正数和负数和0三部分 Byte数据类型一共有8位,如果是无符号数,最大可以表示的数为11111111 = 256 -1 = 255 无符号数代指不 ...
- python 安装scrapy need vistual c++ 14.0 的正面解法
为什么一堆教程里面,都是侧面的. 因为需要你自己去正面刚 正题: 这个问题要的是 build tools 人(控制台)说的很清楚了, 给的链接不是直接解决问题的链接(我安装了 vs_redis.exe ...
- Eclipse错误集合
一.Could not write metadata for '/RemoteSystemsTempFiles'. 错误代码 Could not write metadata for '/Remote ...
- Alpha冲刺10
前言 队名:拖鞋旅游队 组长博客:https://www.cnblogs.com/Sulumer/p/10045588.html 作业博客:https://edu.cnblogs.com/campus ...
- Fescar Quick Start
Quick Start Let's begin with a Microservices example. Use case A business logic for user purchasing ...
- Windows10 VS2017 C++ Json解析(使用jsoncpp库)
1.项目必须是win32 2.生成的lib_json.lib放到工程目录下 3.incldue的头文件放到工程目录,然后设置工程->属性->配置属性->vc++目录->包含目录 ...