重温Javascript(一)-基本概念
工作中要用到JavaScript,一组复习笔记。
一些看法
1. 想想JavaScript目前最常用的宿主环境,浏览器或者服务端V8,都是单线程,所以不用过多的考虑并发的问题,如果是协程来实现异步的方法,反正就是不用考虑竟态条件了。
2. 开发方式。又是OOP,又是OOF,对独立开发来说就是尽情发挥了。对协作开发来说,有时规范不是很好统一,可以实现的方式太过灵活,晕头转向是常有的事,要想通俗易懂,命名比写C# JAVA这类语言有更高的要求。反正经常看不明白this,鬼知道是被丢到哪个环境中被调用了。我想TypeScript也是无奈之下出来的解决方案了。
3. 性能,每个终端有每个终端的环境也罗列不全,套的越深,越是坑。
简单想想,最需要关注的还是JavaScript的OOP语法模型,毕竟不管是在浏览器或是服务器,其他的对象都封装好了,更多的考虑是实现功能的信息模型。
Object类型
Object类型是所有对象实例的基类。
hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(不是原型)是否存在。参数propertyName必须是字符串。
isPrototypeOf(object):object的原型链具有当前实例的原型链,则返回true。
全等操作符
除了在比较值钱不转换操作数之外,全等和不全等操作符没什么区别。全等操作符由3个等号表示,只在两个操作数未经转换就相等的情况下返回。
函数arguments
函数的agruments对象类似数组,可是使用索引来访问,arguments[0],也有length属性
值传递和引用传递
其实这点有点像C#。
1.基本类型值的复制
var num1=5;
var num2=num1;

2.引用复制
var obj1=new Object();
var obj2=obj1;
obj1.name="peter";
alert(obj2.name); //peter

3.传递参数
基本类型值的传递如同基本类型变量的复制,引用类型值得传递,如同引用类型变量的复制。
function addTem(num){
num+=10;
return num;
}
var count=20;
var result=addTen(count);
alert(count); //20 没有变化
alert(result); //30
function setName(obj){
obj.name=“peter”;
}
var person=new Object();
setName(person);
alert(person.name); //peter
坑一 变量喜欢乱跳域
for(var i=0;i<10;i++){
doSomething(i);
}
alert(i); //10
Function类型
每个函数都是Function类型的实例,都与其他引用类型一样具有属性和方法。由于函数是对象,函数名实际上是一个指向函数对象的指针,不会与某个函数绑定。
function sum(num1,num2){
}
var sum=function(num1,num2){};
坑二 函数指针变化
function factorial(num){
if (num <=1) {
return 1;
} else {
return num * factorial(num-1)
}
}
根据上面函数指针的说法,factorial这个名字是可以指向另外的函数的,所以这个函数有可能在运行时被动态改变。
出坑的方法
function factorial(num){
if (num <=1) {
return 1;
} else {
return num * arguments.callee(num-1)
}
}
arguments.callee是一个指针,指向拥有这个arguments对象的函数
var trueFactorial = factorial;
factorial = function(){
return 0;
};
alert(trueFactorial(5)); //120
alert(factorial(5)); //0
this
如果层级很绕,很难看清楚。
总结就是,谁调用该函数,this就指向谁
window.color = "red";
var o = { color: "blue" };
function sayColor(){
alert(this.color);
}
sayColor(); //"red"
o.sayColor = sayColor;
o.sayColor(); //"blue"
apply和call方法
在特定的作用域中调用函数,设置函数体内this对象的值
call与apply第一个参数都是作用域,后面的参数call必须一一列举,apply可以使用数组
function sum(num1, num2){
return num1 + num2;
}
function callSum(num1, num2){
return sum.call(this, num1, num2);
}
alert(callSum(10,10)); //20
bind方法
会创建一个函数的实例,this值会被绑定到传给bind函数的值
window.color = "red";
var o = { color: "blue" };
function sayColor(){
alert(this.color);
}
var objectSayColor = sayColor.bind(o);
objectSayColor(); //blue
encodeURI和encodeURIComponent的区别
encodeURI不会对本身属于URI的特殊字符进行编码,例如冒号、正斜杠、问号和#;encodeURIComponent会对它发现的任何非标准字符进行编码
var uri = "http://www.wrox.com/illegal value.htm#start"; //"http://www.wrox.com/illegal%20value.htm#start"
alert(encodeURI(uri)); //"http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.htm%23start"
alert(encodeURIComponent(uri));
eval方法
当解析器发现代码中调用eval()方法时,会将传入的参数当做实际的ECMAScript语句来解析,把执行结果插入原位置。通过eval执行的代码被认为是包含该次调用的执行环境的一部分,因此被执行的代码具有与该执行环境相同的作用域链。通过eval执行的代码可以引用在包含环境中定义的变量
var msg = "hello world";
eval("alert(msg)"); //"hello world"
eval("function sayHi() { alert('hi'); }");
sayHi();
eval("var msg = 'hello world'; ");
alert(msg); //"hello world"
重温Javascript(一)-基本概念的更多相关文章
- 【JavaScript】重温Javascript继承机制
上段时间,团队内部有过好几次给力的分享,这里对西风师傅分享的继承机制稍作整理一下,适当加了些口语化的描述,留作备案. 一.讲个故事吧 澄清在先,Java和Javascript是雷锋和雷峰塔的关系.Ja ...
- 基本类型和引用类型的值 [重温JavaScript基础(一)]
前言: JavaScript 的变量与其他语言的变量有很大区别.JavaScript 变量松散类型的本质,决定了它只是在特定时间用于保存特定值的一个名字而已.由于不存在定义某个变量必须要保存何种数据类 ...
- 深夜重温JavaScript中的对象和数组
这一块实际上已经学过了,因为没有学好,在工作过程中遇到一些对象或者数组的操作,会去百度查找,浪费了许多宝贵的时间,所以特地再拐过头来重新学习. 对象 基本概念: 对象这种基本的数据结构还有其他很多种叫 ...
- javascript,jquery(闭包概念)(转)
偶尔听人说javascript闭包,让我联想起以前学编译原理和数字逻辑里讲的闭包,以前上课讲的闭包很难懂,而且含有递归的意思在里面,现在不想再查看里面的闭包概念. 但javascript我是经常要用, ...
- JavaScript之DOM概念
一.DOM概念 1.DOM是什么? 1.1 起源.DOM起源于Netscape与Microsoft 公司的DHTML(动态HTML). 1.2 名词解释.Document Object Model,文 ...
- JavaScript的基本概念
主要内容: 语法 数据类型 流控制语句 理解函数 ECMA-262描述了JavaScript语法等基本概念.目前,ECMA-262第3版中定义的ECMAScript是各个浏览器实现最多的版本.所以主要 ...
- JavaScript之基本概念(一)
在我们学习一门编程语言之前,我们应该先了解它的一些基本概念,包括它是什么,它能用来干什么,怎么用等等.这部分内容建议学习时间一天. 一 何为‘JavaScript’ 1 . 什么是JavaScr ...
- JavaScript 的基本概念( ES5 )
语法 区分大小写 标识符 第一个字符必须是一个字母,下划线或者一个美元符( $ ).其他规则无论,最好按照通用的驼峰大小写. 注释 // 单行注释 /* 多行注释 */ 严格模式 在顶部添加如下代码 ...
- JavaScript闭包的概念及用法
1.闭包的概念: 闭包就是能够读取其他函数内部变量的函数. 例如: function f1(){ var n=999; function f2(){ alert(n); } return f2; } ...
随机推荐
- pow()函数的精度问题
妈蛋这个坑了我大半个小时都想不出个原因..后来看到pow的定义才想起,数据类型很重要啊.. 1.底数用常量,指数用整型 #include <stdio.h> #include <ma ...
- windows64下安装MySQLdb连接数据库
MySQLdb是Python连接MySQL的模块,下面介绍一下源码方式安装MySQLdb: 1.首先要下载:http://www.codegood.com/downloads,由于我的python是2 ...
- HDU 5546 Ancient Go (搜索)
题意: Alice和Bob正在下古代围棋,规则如下: 棋盘有8×8个格子,棋子下在棋盘的交叉点上,故可以有9×9个落子的位置 Alice执黑棋Bob执白棋轮流落子 与棋子直线相连的空白交叉点叫做气.当 ...
- 反射(type和assembly)
这里简要介绍type和assembly 自定义特性 为了理解编写自定义特性的方式,应了解一下在编译器遇到代码中某个应用自定义特性的元素时,该如何处理. [AttributeUsage(Attribut ...
- python + requests实现的接口自动化框架详细教程
前段时间由于公司测试方向的转型,由原来的web页面功能测试转变成接口测试,之前大多都是手工进行,利用postman和jmeter进行的接口测试,后来,组内有人讲原先web自动化的测试框架移驾成接口的自 ...
- Unity手游之路自动寻路Navmesh之入门
http://blog.csdn.net/janeky/article/details/17457533 现在的大部分mmo游戏都有了自动寻路功能.点击场景上的一个位置,角色就会自动寻路过去.中间可能 ...
- js框架:vue
vue是一套用于构建用户界面的渐进式框架,vue被设计为可以自底向上逐层应用,核心库只关注图层 待续.......
- java 文件相关问题
1.文件路径 分隔符 System.out.println(File.separator); System.out.println(File.pathSeparator); /*mac os 和 li ...
- Codeforces Round #563 (Div. 2) A. Ehab Fails to Be Thanos
链接:https://codeforces.com/contest/1174/problem/A 题意: You're given an array aa of length 2n2n. Is it ...
- HDU1854 Q-Sequence
http://acm.hdu.edu.cn/showproblem.php?pid=1854 随手练习 #include <bits/stdc++.h> using namespace s ...