JavaScript 学习笔记(一)
1.javascript中,值包括原始值和对象,原始值包括布尔值、数字、字符串、null和undefined,其他的值为对象。
原始值的特点:(1)按值进行比较:3===3> true; 'abc'==='abc'> true
(2)属性不能改变、添加和移除 var src='abc'; str.length=1; str.length> 3 str.foo=3; str.foo> undefined
对象:包括简单对象、数组、正则表达式,特点:(1)按引用进行比较 {}==={}> false var obj1={}; var obj2=obj1; obj1===obj2> true
(2)属性可以自由被改变、添加和移除 var obj={}; obj.foo=123; obj.foo> 123
2. undefined:没有值,未被初始化的变量即为undefined,丢失的参数,访问不存在的属性
null:没有对象,表示空值
undefined和null没有属性,也没有方法, 可被看做false
3. 对值分类:typeof和instanceof
typeof主要用于原始值,instanceof主要用于对象
typeof undefined> 'undefined' typeof null> object ,但是null不是一个对象
null instanceof object> false undefined insteanceoof object> false
4. 被解释为false的值:undefined、null、false、0、NaN、'' ,其他值被解释为true
5. &&:可以返回布尔值,也可为其他值,如果第一个运算数是假的,返回它,否则返回第二个运算数 NaN&&'abc'> NaN 123&&'abc'> 'abc'
||: 可以返回布尔值,也可为其他值,如果第一个运算数是真的,返回它,否则返回第二个运算数 'abc'||123> 'abc' ''||123> 123
6. 所有的数字都是浮点数 1===1.0> true, 还有特殊的数字:NaN,Infinity, Infinity比任何数字大(除了NaN),-Infinity比任何数小(除了NaN)
7. 函数声明具有提升特性—它们的实体会被移动到所在作用域的开始处。这使得我们可以引用后面声明的函数。
function foo(){
bar(); //Ok
function bar(){
}
}
注意,var 声明赋值不具备该特性,
function foo(){
bar(); //Not OK
var bar=function(){
}
}
8. 函数内的arguments不是数组,只是类似数组,有length属性,可以通过[]访问每个参数,但是不能对它调用数组的方法, 可以通过toArray()方法将它变为数组
9. 一个变量的作用域总是完整的函数:
function foo(){
var x=-1;
if(x<0)
{
var tmp=-x;
}
console.log(tmp); //
}
10. 所有的变量声明都会被提升,声明会被移动到函数的开始处,而赋值还在原来的位置进行
function foo(){
console.log(tmp);// undefined
if(false)
{
var tmp=3;
}
}
11. 闭包:每个函数和它周围的变量保持着连接,哪怕离开被创建时的作用域也是如此。函数以及它所连接的周围作用域中的变量即为闭包。
function foo(s){
return function(){
s++;
return s;
}
}
var inc=foo(5);
inc();//
inc();//
inc();//
12. IIFE模式(立即调用表达式):引入新的作用域 , 防止一个变量变成全局变量
(function(){ //开启IIFE
var tmp=...;// 非全局变量
}());
用例:解决闭包造成的无意共享
result=[];
for(var i=0;i<5;i++)
{
(function(){
var i2=i; //复制i
result.push(function(){ return i2}); }();) } console.log(result[1]());//
console.log(result[3]());//
13. 两种面向对象机制:单一对象和构造函数
对象可以认为是一组属性的集合,使用in 运算符检查属性是否存在,使用delete运算符移除属性
任意属性名:使用引号括起来,用方括号获取和设置
var obj={'not a identifier': 123};
>obj['not a identifier']
123
>obj['not a identifier']=456;
//方括号可以动态计算
>obj['not a'+'identifier']
123
14. var func2=obj.func.bind(obj); //使用bind()方法提取一个对象中的方法
JavaScript 学习笔记(一)的更多相关文章
- Java程序猿的JavaScript学习笔记(汇总文件夹)
最终完结了,历时半个月. 内容包含: JavaScript面向对象特性分析,JavaScript高手必经之路. jQuery源代码级解析. jQuery EasyUI源代码级解析. Java程序猿的J ...
- Java程序猿的JavaScript学习笔记(8——jQuery选择器)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- Java程序猿JavaScript学习笔记(2——复制和继承财产)
计划和完成在这个例子中,音符的以下序列: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaSc ...
- Java程序猿的JavaScript学习笔记(3——this/call/apply)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- Java程序猿JavaScript学习笔记(4——关闭/getter/setter)
计划和完成这个例子中,音符的顺序如下: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScr ...
- Java程序猿JavaScript学习笔记(14——扩大jQuery UI)
计划和完成这个例子中,音符的顺序如下: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScr ...
- javascript学习笔记(四) Number 数字类型
数字格式化方法toFixed().toExponential().toPrecision(),三个方法都四舍五入 toFixed() 方法指定小数位个数 toExponential() 方法 用科学 ...
- JavaScript学习笔记之数组(二)
JavaScript学习笔记之数组(二) 1.['1','2','3'].map(parseInt) 输出什么,为什么? ['1','2','3'].map(parseInt)//[1,NaN,NaN ...
- JavaScript学习笔记[0]
JavaScript学习笔记[0] 使用的是廖雪峰JavaScript教程. 数据类型 Number 表示数字,不区分浮点整形. === 比较时不转化数据类型. == 反之. NaN与任何值都不想等, ...
- Java程序猿的JavaScript学习笔记(1——理念)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
随机推荐
- Form表单(回车)提交问题
我们有时候希望回车键敲在文本框(input element)里来提交表单(form),但有时候又不希望如此.比如搜索行为,希望输入完关键词之后直接按回车键立即提交表单,而有些复杂表单,可能要避免回车键 ...
- zabbix3.0 安装Tips
原文转自:http://www.cnblogs.com/tae44/p/4812190.html#3270843 此处只能留空,否则,提示安装无法进行!!
- 【python】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
# encoding:utf-8 # p001_1234threeNums.py def threeNums(): '''题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多 ...
- Core文件作用、设置及用法
http://blog.csdn.net/lanmolei814/article/details/45201693 ====================================== 1.C ...
- ubuntu命令大全
一.文件/文件夹管理 ls 列出当前目录文件(不包括隐含文件) ls -a 列出当前目录文件(包括隐含文件) ls -l 列出当前目录下文件的详细信息 cd .. 回当前目录的上一级目录 cd - 回 ...
- The import java.io cannot be resolved
在导入一个新项目后出现 The import java.io cannot be resolved.String cannot be resolved to a type 解决: 将JRE Syste ...
- spring知识大全(3)
4 Spring对持久层的支持 Spring对持久层的支持:① JDBC,② O/R Mapping(Hibernate,TopLink等) 一.Spring对持久层支持采用的策略: 1.Spring ...
- windows下nginx的启动关闭
Windows下Nginx的启动.停止等命令 在Windows下使用Nginx,我们需要掌握一些基本的操作命令,比如:启动.停止Nginx服务,重新载入Nginx等,下面我就进行一些简单的介绍. .启 ...
- http statusCode(状态码) 200、300、400、500序列
201-206都表示服务器成功处理了请求的状态代码,说明网页可以正常访问. 200(成功) 服务器已成功处理了请求.通常,这表示服务器提供了请求的网页. 201(已创建) ...
- LoopBackJS 之 文件上传下载——使用loopback-component-storage
参考链接: http://loopback.io/doc/en/lb2/Storage-component.html#creating-a-storage-component-data-source ...