javascript中常用编程知识


Posted in Javascript onApril 08, 2013

1.null 与 undefined

* 从一个对象中获取某个属性,如果该对象及其 prototype 链 中的对象都没有该属性的时候,该属性的值为 undefined 。
* 一个 function 如果没有显式的通过 return 来返回值给其调用者的话,其返回值就是 undefined 。有一个特例就是在使用new的时候。
* JavaScript 中的 function 可以声明任意个形式参数,当该 function 实际被调用的时候,传入的参数的个数如果小于声明的形式参数,那么多余的形式参数的值为 undefined 。
* null为空对象,注意与空的对象({})的区别。
简单来说,对于所有变量,只要声明后还没有指定初始值 ,那么他就是undefined,如果是Object类型用来表示空引用的概念,那么就是用null来表示。

2.if 表达式

* Null总是为假(false)
* Undefined总是为假(false)
* Number+0,-0 或是 NaN 的时候为假,其它值为真
* String空字符串的时候为假,其它值为真
* Object总是为真(true)

3.Array

JavaScript 中的数组(Array)和通常的编程语言,如 Java 或是 C/C++ 中的有很大不同。在 JavaScript 中的对象就是一个无序的关联数组,而 Array 正是利用 JavaScript 中对象的这种特性来实现的。在 JavaScript 中,Array 其实就是一个对象,只不过它的属性名是整数,另外有许多额外的属性(如 length)和方法(如 splice)等方便地操作数组。

4.new 运算符

JavaScript 中并没有 Java 中的类(class)的概念,而是采用构造器(constructor)的方式来创建对象。在 new 表达式中使用构造器就可以创建新的对象。由构造器创建出来的对象有一个隐含的引用指向该构造器的 prototype 。

5.prototype

prototype是javascript原型继承的核心概念,大家一定在某个javascript类库里面见过 Array.prototype.push.call()这样的用法,所以归根结底prototype是一个对象。我们可以通过 prototype给native class添加一些有用的方法,也可以通过prototype实现继承。如果对prototype比较感兴趣,可以在ff里面通过__proto__来访 问指定对象的原型链。

6.scope chain

执行上下文(execution context)是 ECMAScript 规范中用来描述 JavaScript 代码执行的抽象概念。所有的 JavaScript 代码都是在某个执行上下文中运行的。在当前执行上下文中调用 function 的时候,会进入一个新的执行上下文。当该 function 调用结束的时候,会返回到原来的执行上下文中。如果 function 调用过程中抛出异常,并没有被捕获的话,有可能从多个执行上下文中退出。在 function 调用过程,也可能调用其它的 function,从而进入新的执行上下文。由此形成一个执行上下文栈。

注:如果对scope chain比较感兴趣,可以在ff里面通过__parent__属性来访问函数的scope chain,比较遗憾的是ff的js引擎SpiderMonkey对这个属性的支持不是很完美,出现内部函数的时候会出错,所以建议用Rhino (http://developer.mozilla.org/en/docs/Rhino)。

注:这里需要提的是注意函数表达式和函数声明对scope chain的影响。

7.closure

闭包也算是js比较常用的特色功能了,一般我们在java里面执行完毕的一个函数,内部变量将全部被回收,但在javascript中,我们可以通过某些方法,使执行完的函数的内部变量依然存在,并且可访问,这样就构成了一个闭包。

当然,什么东西都有两面性,闭包给我们带来好处的时候,也会带来不少的麻烦,比如一个不留神就产生了内存的泄漏,所以我们需要合理的应用这些技术。如果要 深入学习闭包,建议去看几个js library(prototype,jquery,mootools),里面有一些很经典的闭包应用,比如bind方法等,这里就不多赘述。

Javascript 相关文章推荐
一些相见恨晚的 JavaScript 技巧
Apr 25 Javascript
JavaScript中实现无缝滚动、分享到侧边栏实例代码
Apr 06 Javascript
JS实现屏蔽网页右键复制及ctrl+c复制的方法【2种方法】
Sep 04 Javascript
浅谈js中的引用和复制(传值和传址)
Sep 18 Javascript
JS封装通过className获取元素的函数示例
Dec 20 Javascript
jQuery插件HighCharts绘制2D半圆环图效果示例【附demo源码下载】
Mar 09 Javascript
Vue2.0实现购物车功能
Jun 05 Javascript
React+Webpack快速上手指南(小结)
Aug 15 Javascript
pm2启动ssr失败的解决方法
Jun 29 Javascript
Vue使用lodop实现打印小结
Jul 06 Javascript
layui框架与SSM前后台交互的方法
Sep 12 Javascript
js绘制一条直线并旋转45度
Aug 21 Javascript
利用webqq协议使用python登录qq发消息源码参考
Apr 08 #Javascript
setInterval,setTimeout与jquery混用的问题
Apr 08 #Javascript
JQueryEasyUI Layout布局框架的使用
Apr 08 #Javascript
jquery 实现二级/三级/多级联动菜单的思路及代码
Apr 08 #Javascript
JQueryEasyUI datagrid框架的基本使用
Apr 08 #Javascript
Jquery中使用setInterval和setTimeout的方法
Apr 08 #Javascript
JQueryEasyUI datagrid框架的进阶使用
Apr 08 #Javascript
You might like
mysql 性能的检查和优化方法
2009/06/21 PHP
应用开发中涉及到的css和php笔记分享
2011/08/02 PHP
php获取汉字首字母的函数
2013/11/07 PHP
php实现过滤表单提交中html标签的方法
2014/10/17 PHP
php中使用session防止用户非法登录后台的方法
2015/01/27 PHP
四个常见html网页乱码问题及解决办法
2015/09/08 PHP
PHP获取MySQL执行sql语句的查询时间方法
2018/08/21 PHP
laravel 数据迁移与 Eloquent ORM的实现方法
2019/04/12 PHP
jquery实现按Enter键触发事件示例
2013/09/10 Javascript
Javascript实现返回上一页面并刷新的小例子
2013/12/11 Javascript
window.open 以post方式传递参数示例代码
2014/02/27 Javascript
JavaScript判断变量是对象还是数组的方法
2014/08/28 Javascript
JS在可编辑的div中的光标位置插入内容的方法
2014/11/20 Javascript
jquery图片轮播特效代码分享
2020/04/20 Javascript
实例讲解JavaScript中instanceof运算符的用法
2016/06/08 Javascript
Javascript缓存API
2016/06/14 Javascript
BootStrap 下拉菜单点击之后不会出现下拉菜单(下拉菜单不弹出)的解决方案
2016/12/14 Javascript
微信小程序开发之好友列表字母列表跳转对应位置
2017/09/26 Javascript
js 两个日期比较相差多少天的实例
2017/10/19 Javascript
Node.js学习教程之HTTP/2服务器推送【译】
2017/10/31 Javascript
nodejs基于express实现文件上传的方法
2018/03/19 NodeJs
JS使用栈判断给定字符串是否是回文算法示例
2019/03/04 Javascript
vue无限轮播插件代码实例
2019/05/10 Javascript
详解Vue.js3.0 组件是如何渲染为DOM的
2020/11/10 Javascript
[01:07:17]EG vs Optic Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
Python安装第三方库及常见问题处理方法汇总
2016/09/13 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
2018/10/30 Python
python3.5安装python3-tk详解
2019/04/26 Python
python3 selenium自动化测试 强大的CSS定位方法
2019/08/23 Python
NumPy排序的实现
2020/01/21 Python
Python程序慢的重要原因
2020/09/04 Python
党支部季度考核意见
2015/06/02 职场文书
linux中nohup和后台运行进程查看及终止
2021/06/24 Python
Java 语言中Object 类和System 类详解
2021/07/07 Java/Android
Jmerte 分布式压测及分布式压测配置
2022/04/30 Java/Android
如何Tomcat中使用ipv6地址
2022/05/06 Servers