3. javacript高级程序设计-基本概念
1.1 语法
ECMAScript借鉴了C和其他类C语言的语法
1.1.1 区分大小写
ECMAScript中的一切(变量,函数和操作符)都是区分大小写的,变量test和Test是不同的变量
1.1.2 标识符
标识符,就是指变量,函数和属性的名字,或者函数的参数。标识符可以是按照以下格式规则组合起来的一或多个字符
(1). 第一个字符必须是一个字母,下划线或者一个美元符号
(2). 其他字符可以是字母、下划线、美元符号或数字
标识符中的字母也可以包含扩展的ASCII或者Unicode字母字符
1.1.3 注释
单行注释以两个斜杠开头,如下所示
|
//单行注释 |
多行注释
|
/* * *多行注释 * */ |
1.1.4 严格模式
要在整个脚本中启用严格模式,可以在顶部添加如下代码
|
“use strict” |
在函数上方包含这条编译指令,可以指定函数在严格模式下运行
|
“use strict” |
1.1.5 语句
|
var sum = 1 +2 var sum = 1+2; |
虽然语句结尾的分号不是必须的,但是建议在语句结尾都不要省略
1.2 变量
定义变量时要使用var 操作符,如下所示
var message;
这样定义的变量奖定义为该变量作用域中的局部变量;
省略var 操作符定义的变量为全局变量,但建议不要这么使用
message;
定义的变量可以用来保存任何值
message =10;
message = “hi”;
1.3 数据类型
ECMAScript中有5中简单数据类型:Undefined ,Null,Boolean,Number和String。还有一种复杂数据类型Object
1.3.1 typeof操作符
typeof用于检测给定变量的数据类型,对一个值使用typeof操作符可能返回下列某个字符串:
- “undefined”—这个值未定义
- “boolean”—这个值是布尔值
- “string”—这个值是字符串
- “number”—这个值是数字
- “object”—这个值是对象或者null
- “function”—这个值是函数
1.3.2 Undefined类型
Undefined类型只有一个值,就是undefined,使用var 定义的变量未赋值就是undefined
1.3.3 Null类型
Null类型只有一个值,就是null,用来表示一个空对象指针,通常将保存对象的变量初始化为null
1.3.4 Boolean类型
true或false两种类型
1.3.5 Number类型
Number类型用来表示数字,可以表示整数或者浮点数
l 整形
- 十进制
var num = 10;
- 八进制:以数字0开头,无效的8进制数据会省略前导0
var num = 070 //8进制56
var num = 089 //无效8进制,为89
- 16进制:十六进制前两位必须是0x,无效的16进制会报语法错误
var num = 0xA //十六进制的10
l 浮点数
- 浮点数值,该数值中必须包含一个小数点,并且小数点后面必须至少有一位数字
- 对于极大极小的数值,可以使用e表示法
l 数值范围
最大值Number.MAX_VALUE表示,超出最大值转化为Infinity(正无穷大)
最小值Number.MIN_VALUE表示,小于最小值转化为-Infinity(负无穷大);
可以使用isFinite()函数监控数值是否在最大和最小之间
l NaN
NaN,即非数值,表示一个该返回数值的操作未返回数值,NaN与任何数值不相等,可以使用isNaN判断是否NaN
l 数值转换
- Number()函数转换
- Ø 如果是Boolean值,true和false将分别转换为1和0
- Ø 如果是数字值,只是简单的传入和返回
- Ø 如果是null值,返回0
- Ø 如果是undefined,返回NaN
- Ø 如果是字符串,遵循下列规则:
- 如果只包含数字,则转化为十进制,省略前导0
- 如果包含有效的浮点格式,则转化为浮点数值,省略前导0
- 如果包含有效的十六进制,则将其转化为相应的十进制
- 如果字符串是空的,则转化为0
- 其他的则转化为NaN
- Ø 如果是对象,则调用对象的valueOf()方法,然后依照前面的转化规则,如果转化结果为NaN,则调用对象的toString()方法,在依照前面的规则转化
- parseInt()
- Ø parseInt()函数在转化字符串时,会忽略字符串前面的空格,直到找到第一个非空格字符
- Ø 该函数提供第二个操作符,转换时使用的基数(即多少进制)
- parseFloat()
- Ø parseInt()函数在转化字符串时,会忽略字符串前面的空格,直到找到第一个无效的浮点字符为止
- Ø parseFloat()识别所有的浮点字符格式
1.3.6 String类型
String类型用于表示由0或者多个16位Unicode字符组成的字符序列,即字符串,字符串可以由双引号(“)和单引号(‘)表示。
(1). 转义序列
|
转义序列 字符 \b 退格 \f 走纸换页 \n 换行 \r 回车 \t 横向跳格 (Ctrl-I) \' 单引号 \" 双引号 \\ 反斜杠 |
|
\xnn 以十六进制代码nn表示的一个字符 \unnnn 以十六进制代码nnnn表示的一个Unicode字符 |
(2). 字符串是不可变的
(3). String()函数转换
- 如果值有toString()方法,则调用该方法(没有参数)并返回相应的结果
- 如果值是null,则返回”null”
- 如果值是undefined,则返回”undefined”
1.3.7 object类型
对象其实就是一组数据和功能的集合,对象可以通过执行new操作符后跟要创建的对象类型的名称来创建:
var obj = new Object();
Object的每个实例都具有下列属性和方法:
(1). constructor:保存着用于创建当前对象的函数
(2). hasOwnProperty(propertyName):用于检测给定的属性在当前对象实例中是否存在。其中,作为参数的属性名(propertyName)必须以字符串形式指定
(3). isPrototypeOf(object):用于检查传入的对象是否是传入的原型
(4). propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语句来枚举
(5). toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应
(6). toString():返回对象的字符串表示
(7). valueOf():返回对象的字符串、数值或布尔值表示。通常与toString()方法的返回值相同
1.4 操作符
1.4.1 一元操作符
(1). 递增,递减操作符 ++,--
(2). 一元加,减操作符 + ,-
1.4.2 位操作符
(1). 按位非 ~,本质位操作符的负数-1
(2). 按位与 &
(3). 按位或 |
(4). 按位异或 ^
(5). 左移 << 原来的数字乘以 2的左移位数的阶乘 不影响符号
(6). 右移 >> 原来的数字除以 2的左移位数的阶乘 不影响符号
(7). 无符号右移 >>> 将数值的所有32位都向右移动,包括符号数
1.4.3 布尔操作符
(1). 逻辑非 !
(2). 逻辑与 &&
(3). 逻辑或 ||
1.4.4 乘性操作符
(1). 乘法 *
(2). 除法 /
(3). 求模 %
1.4.5 加性操作符
(1). 加法
(2). 减法
1.4.6 关系操作符
(1). 小于(<),大于(>),小于等于(<=),大于等于(>=),返回布尔值
(2). 比较规则如下:
- 如果两个数值,则执行数值比较
- 如果两个操作数都是字符串,则比较字符串对应的字符编码值
- 如果一个操作数是数值,则将另一个操作数转化为数值进行比较
- 如果一个操作数是对象,则调用对象的valueOf()方法,得到的值按照前面的规则进行比较;如果对象没有valueOf()方法,则调用对象的toString()方法,得到的值按照前面的方法进行比较
- 如果一个操作符是布尔值,则将其转化为数值进行比较
1.4.7 相等操作符
(1). 相等和不相等 == !=
(2). 全等和不全等 === !==
1.4.8 条件操作符
variable = boolean_expression?true_value:false_value;
1.4.9 赋值操作符
(1). 简单的赋值操作符由等于号(=)表示
var num =10;
(2). 复合赋值操作符
乘赋值 *=
除赋值 /=
模赋值 %=
加赋值 +=
减赋值 -=
左移赋值 <<=
有复合右移 >>=
无符号右移 >>>=
1.4.10 逗号操作符
var num1=1,num2=2,num3=3;
1.5 语句
1.5.1 if语句
if(condition) statement1 else statement2
1.5.2 do-while语句
do {
statement
}while(expression);
1.5.3 while语句
while(expression) statement;
1.5.4 for语句
for(initialization;expression;post-loop-expression) statement
1.5.5 for-in语句
for(property in expression) statement
1.5.6 break和continue语句
break 和 continue 语句用于在循环中精确的控制代码的执行;
break语句会立即退出循环,强制执行循环后面的语句;
continue退出循环后会从循环的顶部继续执行
1.5.7 switch语句
switch(expression):{
case value1:
statement;
break;
case value:2
statement;
break;
default:
statement;
}
1.5.8 with语句
with语句的作用是将代码的作用域设置到一个特定的对象中
with(expression) statement;
1.5.9 label语句
使用label语句可以在代码中添加标签,以便将来使用
label:statement;
1.6 函数
(1). 声明
function functionName(arg0,arg1,arg2,…,argN){
statements
}
(2). 未指定返回值的函数返回的是一个特殊的undefined值
(3). ECMAScript中没有函数签名的概念,因为其函数参数是以一个包含0或者多个值的数组的形式传递
(4). 传递任意数量的参数,并且可以通过arguments对象来访问这些参数
(5). 由于不存在函数签名的特性,函数不能重载
3. javacript高级程序设计-基本概念的更多相关文章
- Javascript高级程序设计——基本概念(一)
一.语法 EMCA-262通过叫做ECMAScript的“伪语言”为我们描述了javascript实现的基本概念 javascript借鉴了C的语法,区分大小写,标示符以字母.下划线.或美元符号($) ...
- 7. javacript高级程序设计- 函数表达式
1. 函数表达式 1.1 函数定义 函数定义的方式有两种:一种是函数声明,另一种就是函数表达式. (1). 函数声明:函数声明的重要特征就是函数声明提示,函数声明会在函数执行前执行 function ...
- Javascript高级程序设计——基本概念(二)
相等操作符: 相等==:这个操作符会先转换操作数,强制类型转换,然后再比较他们的相等性. null == undefined //true NaN == NaN //false"5" ...
- 25. javacript高级程序设计-新兴的API
1. 新兴的API requestAnimationFrame():是一个着眼于优化js动画的api,能够在动画运行期间发出信号.通过这种机制,浏览器就能够自动优化屏幕重绘操作 Page Visibi ...
- 24. javacript高级程序设计-最佳实践
1. 最佳实践 l 来自其他语言的代码约定可以用于决定何时进行注释,以及如何进行缩进,不过JavaScript需要针对其松散类型的性质创造一些特殊的约定 l javascript应该定义行为,html ...
- 23. javacript高级程序设计-数据存储
1. 数据存储 1.1 cookie HTTP Cookie, cookie,最初用来在客户端存储回话信息. (1). 限制,不同浏览器对特定域名下的cookie 的个数有限制,每个域名下最好不要操过 ...
- 22. javacript高级程序设计-高级技巧
1. 高级技巧 1.1 函数 l 可以使用惰性载入函数,将任何分支推迟到第一个调用函数的时候 l 函数绑定可以让你创建始终在指定环境中运行的函数,同时函数柯里化可以让你创建已经填写了某些参数的函数 l ...
- 21. javacript高级程序设计-Ajax与Comet
1. Ajax与Comet 1.1 XMLHttpRequest对象 IE5是第一款引入XHR对象的浏览器,IE5中是通过MSXML库中的一个ActiveX对象实现的.因此在IE中可能存在MSXML2 ...
- 20. javacript高级程序设计-JSON
1. JSON JSON是一种数据格式,存在以下三种类型的值: l 简单值:使用与JavaScript相同的语法,可以在JSON中表示字符串.数值.布尔值和null,不支持 undefined,例如: ...
随机推荐
- clang
1.安装 clang 可以从官网下载,如果是CentOS 6 系统,也可以在 /etc/yum.repos.d/ 目录下增加一个 epel.repo 文件,内容如下: [epel] name=Extr ...
- Linux下Redis常用命令
>src/redis-server 启动 Redis 服务 或者>src/redis-server redis.conf src/redis-server redis.conf 1&g ...
- grep之字符串搜索算法Boyer-Moore由浅入深(比KMP快3-5倍)
这篇长文历时近两天终于完成了,前两天帮网站翻译一篇文章“为什么GNU grep如此之快?”,里面提及到grep速度快的一个重要原因是使用了Boyer-Moore算法作为字符串搜索算法,兴趣之下就想了解 ...
- QT编写上位机程序一定要初始化变量以及谨慎操作指针
背景: 在编写QT上位机界面时,界面在运行的时候经常出现卡死或者直接挂掉的怪现象. 正文: 上位机有个函数为check_receive():该函数的作用为定时调用循环检测USB是否有数据.若有,则将信 ...
- 【C语言入门教程】4.1 一维数组
数组与指针涉及到数据在内存中的存储位置问题,数组由连续的存储单元组成,最低地址对应于数组的第一个单元,最高地址对应于数组的最后一个单元.指针是一种特殊的变量,该变量所存放的是内存地址,通过指针变量可访 ...
- iOS企业级开发初级课程-表视图(13集)
首先了解了表视图的组成.表视图类的构成.表视图的分类以及表视图的两个重要协议(委托协议和数据源协议),对表视图有了一个整体上的认识.接下来我们掌握了如何实现简单表视图和分节表视图,以及表视图中索引.搜 ...
- 关于iframe的滚动条,如何去掉水平滚动条或垂直滚动条
关于iframe的滚动条,如何去掉水平滚动条或垂直滚动条 关于<iframe>可以通过设置属性scrolling="no" 去掉iframe的两个滚动条. 如何只去掉水 ...
- iOS开发——高级篇——地图 MapKit
一.简介 1.在移动互联网时代,移动app能解决用户的很多生活琐事,比如周边:找餐馆.找KTV.找电影院等等导航:根据用户设定的起点和终点,进行路线规划,并指引用户如何到达 在上述应用中,都用到了定位 ...
- h5的特点
关于HTML面试题汇总之H5 一.H5有哪些新特性,移除了哪些元素?如何处理h5新标签的浏览器兼容性问题,如何区分html和html5 1. html5不在是SGL(通用标记语言)的一个子集,而包 ...
- 解决Eclipse中文乱码
http://hsj69106.blog.51cto.com/1017401/595598 使用Eclipse编辑文件经常出现中文乱码或者文件中有中文不能保存的问题,Eclipse提供了灵活的设置文件 ...