Javascript标准参考教程(阮一峰)笔记总结---语法篇
来源:互联网 发布:淘宝乔丹是真的吗 编辑:程序博客网 时间:2024/04/29 20:36
(1)基本语法
标识符
1、标识符(identifier)是用来识别具体对象的一个名称。最常见的标识符就是变量 名,以及后面要提到的函数名。
2、第一个字符,可以是任意Unicode字母(包括英文字母和其他语言的字母);
3、中文是合法的标识符,可以用作变量名。
注释
1、<!--和-->也被视为单行注释。
注意:需要注意的是,-->只有在行首,才会被当成单行注释,否则就是一个运算符
x=1;<!--x=2;
-->x=3;
不是在开头:n --> 0实际上会当作n-- > 0,因此输出2、1、0。
区块
1、JavaScript使用大括号,将多个相关的语句组合在一起,称为“区块”(block)。
2、单独使用的区块在JavaScript中意义不大,很少出现。区块往往用来构成其他更复杂的语法结构
{vara=1;}
语句
1、常量不能被赋值 2=a;//false
2、while (expression)statement;//statement一条语 句,可以省略大括号,if语句也是一样
3、while语句后面的分号不能省略;
4、label 标记,配合break 跳出指定的循环,也可以配合continue跳过某次循环
top:
if(i==1) break top;
(2)数据类型转换
强制转换
1、Number(null)// 0
Number('\t\v\r12.34\n')// 12.34
Number({})// NaN 不是报错
String(null)// "null"
2、对象的 valueOf方法返回对象本身
toString方法先于valueOf方法执行
如果调用的需要是值,就调用valueOf,如果调用的是字符串,则调用toString
3、
Boolean({ })// true
Boolean([ ])// true
Boolean(new Boolean(false))// true
所有对象(包括空对象)的转换结果都是true
(3)错误处理机制
Error对象(7种)
1、JavaScript原生提供一个Error构造函数,所有抛出的错误都是这个构造函数的实例。
varerr=new Error('出错了');
err.message// "出错了"
根据语言标准,Error对象的实例必须有message属性,表示出错时的提示信息,其他属性则没有提及
message:错误提示信息
name:错误名称(非标准属性)
stack:错误的堆栈(非标准属性)
2、RangeError是当一个值超出有效范围时发生的错误
1)数组长度为负数。
2)Number对象的方法参数超出范围,一级函数堆栈超过最大值
throw
1、throw语句的作用是中断程序执行,抛出一个意外或错误。它接受一个表达式作为参数,可以抛出各种值, 如 throw 'Error'
try catch
catch中还可以加入判断语句,判断不同的错误类型
(goto语句是c语言中无条件的转移语句)
finally代码块
1、try...catch结构允许在最后添加一个finally代码块,表示不管是否出现错误,都必需在最后运行的语句。
2、右边没有catch语句块,所以错误没用捕获,执行后finally再执行return,return下面的代码不再执行,如果finally中也有个return,
则会覆盖try中的return。尽管return在finally前面
3、
(3)函数
函数表达式
1、函数表达式需要在末尾加上分号。
2、加上函数名有两个用法:
一是可以在函数体内部调用自身,
二是方便除错(除错工具显示函数调用栈时,将显示函数名,而不再显示这里是一个匿名函数)(看不懂。。。。)
Function构造函数
1、不论你传几个参数,最后一个参数作为函数体。
2、可以不使用new,返回结果一样,
3,不直观,几乎无人使用
函数的属性和方法
1、属性
length:表示函数定义之中参数的个数,调用不管输入多少个参数,都不变,length只反应预期传入的参数个数。
toString:返回函数的源码(整个函数,内部的注释都会被返回);
2、
1)如果参数是原始类型的值(数值、字符串、布尔值):
参数的传递方式是值传递。即修改参数的值,不影响外部的值;
2)如果参数是复合类型的值(数组、对象、其他函数):传递方式为址传递
注意,如果函数内部修改
的,不是参数对象的某个属性,
而是替换掉整个参数,这时不会
影响到原始值。(如右图)这是
因为,形式参数(o)与实际参
数obj存在一个赋值关系。
3、同名参数,取最后出现的值
argumentes对象
1、argumentes对象可以在运行时修改。但是在严格模式下只读,修改是无效的,但是不会报错
varargs=Array.prototype.slice.call(arguments);
Array.prototype.concat.apply([1,2,3],arguments)
让argumentes使用数组的方法,或者用循环,将其变为数组
2、可以通过arguments.callee()调用函数自身,严格模式下无效
闭包
1、读取函数内部的变量;(内部数据被return出来)
2、让这些变量始终保持在内存中,即闭包可以使得他诞生环境一直存在。
有属性和私有方法3、用处封装对象的私
立即调用函数表达式(IIFE)
1、读取函数内部的变量;(内部数据被return出来)
function(){/* code */ }();//出错
因为:function这个关键字即可以当作语句,也可以当作表达式。
// 语句
functionf() {}
// 表达式
varf=functionf() {}
所以Javascript引擎规定,function关键字出现在行首,解释为语句;
所以将语句放入()中,让引擎将其理解成一个表达式;
所以有很多中写法,前面加+,~,都行
包括new 关键字也能达到效果(只有传递参数是才需要后面的小括号)
(function(){/* code */ }());
// 或者(function(){/* code */ })();
上面两种方法都可以,但是必须以分号结尾,不然可能会报错
2、目的
1)量一是不必为函数命名,避免了污染全局变
2)内部形成了一个单独的作用域,可以封装一些外部无法读取的私有变量。
eval命令
1、没有自己的作用域,都是在当前作用域下进行的。所以会影响到eval外部的变量。因此严格模式下(有时仍可以修改,有时有用,有时无效),修改,定义变量都不影响外部的作用域,但是依然可以访问外部。
var e = eval; e.("a=2") //这是间接调用,它的作用域为全局作用域,
eval("a=2")//这是当前作用域
(4)数值
整数和浮点数
1、javascript所有数字都是以64位浮点数形式储存
1===1.0// true
2、自动用科学计数法,小数点前面数字多于21位,或者后面的0多于5位
数值的进制
前导0后面有数字8和9,则该数值被视为十进制。
特殊数值
1、+0和-0在作为分母时是不一样的
2、isNaN(['xzy'])// true
// 等同于
isNaN(Number(['xzy']))// true
计算的时候先是先转化为数值,所以右式成立,isNAN(null) //true,null被转化为0
3、正向溢出(overflow)、负向溢出(underflow)
4、isFinite函数返回一个布尔值,检查某个值是不是正常数值
如“isFinite(-1) //true
(5)对象
概述
1、对象所有键名都是字符串,如果格式不符合标识符的条件,必须加引号
2、如果不同的变量名指向同一个对象,那么它们都是这个对象的引用,也就是说指向同一个内存地址
3、{foo:123}是语句还是表达式和IFFE是一样的分类
delete
1、delete o.p 删除对象的属性 ,无论是否存在都返回true,但是如果对象设置了configurable:false 属性后,表示不可操作。返回false;
2、delete 只能删除对象本身的属性,无法删除继承的属性。但返回true
3、delete不能删除var 命令声明的变量
in
1、'p' in o o中是否存在键名p true
2、in 不能识别是本身的属性还是继承的,但是hasOwnProperty可以判断
for...in
1、用来遍历一个对象的全部属性,
2、遍历的都是enumerable(可枚举)的属性,
3、它不仅遍历对象的自身的属性,还遍历继承的属性
4、对象还有toString属性,但是它默认是不可枚举的
with
1、弊端是绑定对象不明确:
3、with 可以替换模版变量2、with内部的变量必须是对象已经存在的属性(如没有,就先设置,再使用with),否则创建的是当前作用域的全局变量,这是以为with区块没用改变作用域
(6)数据类型
概述
1、6种数据类型,ES6中加了symbol类型
2、null 空值;undefined未定义
3、&&也叫两元逻辑运算符
!a 也叫前置逻辑运算符
阅读全文
0 0
- Javascript标准参考教程(阮一峰)笔记总结---语法篇
- JavaScript 标准参考教程--基本语法 学习笔记
- JavaScript 标准参考教程
- 读《JavaScript 标准参考教程(alpha)阮一峰》(上)
- 读《JavaScript 标准参考教程(alpha)阮一峰》(中)
- 读《JavaScript 标准参考教程(alpha)阮一峰》(下)
- 收藏了阮一峰JavaScript标准参考教程
- JavaScript 标准参考教程(alpha)
- JavaScript 标准参考教程(alpha)
- javaScript 标准参考教程(alpha)
- JavaScript 标准参考教程(alpha)
- JavaScript标准参考教程(alpha)
- JavaScript标准教程之基本语法
- 《JavaScript标准参考教程(alpha)》读书笔记一:面向对象编程
- javascript参考教程(一)JavaScript 简介
- javascript参考教程(二)写在前面
- javascript参考教程(四)文档对象
- javascript参考教程(五)事件处理
- 关于如何方便使用枚举
- Java中能否利用函数参数来返回值
- Tomcat日志
- 数据库优化的八种方式!
- 【图像处理】透视变换 Perspective Transformation
- Javascript标准参考教程(阮一峰)笔记总结---语法篇
- WebView
- 为什么要设置Java环境变量
- JS语法: 由++[[]][+[]]+[+[]] = 10 ?引发的问题
- 特性查询采用@supports规则,不同的浏览器支持不同的css属性
- PG(HGDB)支持在同一个insert语句中插入多行数据
- 读《图书馆的故事》
- 机器学习中的评估方法
- maven dependency依赖中scope标签的常用值