JS高级程序设计学习笔记之第三章基本概念(语法,数据类型,流控制语句,函数)——查漏补缺
一、语法:
- 区分大小写;
2.标识符:就是指变量、函数、属性的名字,或者函数的参数
a、标志符的规则:①第一个字符必须是一个字母、下划线(_)或一个美元符号($)。
②其他字符可以是字母,下划线,美元符号或者数字。
b、标志符采用驼峰大小写格式。
c、严格模式:在顶部添加以下代码:"use strict";
d、语句:结尾加入分号、在控制语句中使用代码块为最佳实践。
二、关键字与保留字
三、变量:ECMAScript的变量是松散类型,可以保存任何类型的数据。且在初始化变量时,不会为它标记类型。
1、不建议修改变量所保存值得类型,但这种操作是有效的
2、使用var操作符定义的变量为局部变量。函数退出后会被销毁。
3、不推荐省略var操作符来定义全局变量。如果有意的忽略var操作符,也会由于相应变量不会马上就有定义而导致不必要的混乱。给未经声明的变量赋值在严格模式下会报错。
四、数据类型:ECMAScript有5种简单数据类型(基本数据类型)——Undefined、Null、Boolean、Number、和String。一种复杂数据类型——Object。
1.typeof操作符——检测给定变量的数据类型
undefined——如果这个值未定义;
boolean——如果这个值是布尔值;
string——如果这个值是字符串;
number——如果这个值是数值;
object——如果这个值是对象或者null;
function——如果这个值是函数;
2.undefined类型:
a、在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined。(默认取得)。
b、对于尚未声明的变量,只能执行一项操作,使用typeof操作符检测其数据类型。返回undefined。
c、尽可能显式的初始化变量,这样当ytpeof返回undefined时,我们就知道 被检测的变量还没有被声明,而不是尚未初始化。
3、null类型:
a、如果定义的变量准备在将来用于保存对象,那么最好将变量初始化为null而不是其他值。
b、undefined的值是派生自null的,所以他们的相等性测试返回true。(双等返回true,三等返回false)。
4、boolen类型:
a、Boolean类型的字面量true和false是区分大小写的。其他写法都不是Boolean值,只是标志符。
b、ECMAScript中所有类型的值都有与这两个Boolean值等价的值。要将一个值转换成对应的Boolean值,可以调用转型函数Boolean()。
数据类型 | 转换为true的值 | 转换为false的值 |
Boolean | true | false |
string | 任何非空字符串 | 空字符串 |
number | 任何非零数值(包括无穷大) | 0和无穷大 |
object | 任何对象 | null |
undefined | 不适用 | undefined |
5、number类型:
a、八进制字面量的第一位必须是零(0),然后是八进制数字序列。如果字面值中的数值超出了范围,那么前导零将被忽略,后面的数值被当做十进制数值解析。八进制字面量在严格模式下无效。
b、十六进制字面量的前两位必须是0x,后跟任何十六进制数字0~9和a~z,字母可大写可小写。
c、在进行算术计算时,所有八进制与16进制表示的数最终都被转换成十进制
d、浮点数值:
①数值中必须包含一位小数点,小数点后必须至少有一位数字。小数点前可以没有整数,但是不推荐。浮点数值若能转换为整数值,那么会被转换。
②极大极小值用e表示法。
③浮点数的精度有bug,所以不要测试某个浮点数的值
e、数值范围:超出js数值范围的值会被自动转换成Infinity。Infinity无法参与计算。isFinite()函数在参数位于最大最小值之间时会返回true。
f、NaN:用来表示一个本来要返回数值的操作数未返回数值的情况。
①任何涉及NaN的操作,都返回NaN。NaN与任何值都不相等,包括他本身。
②isNaN()函数接收一个参数,该参数可以是任何类型,函数会尝试将参数转换为数值,任何不能被转换为数值的值都会导致函数返回true。该函数适用于对象,先调用对象的valueOf()方法,然后确定该方法返回的值能否转换为数值。若不能,则基于这个返回值再调用toString()方法,再测试返回值。
g、数值转换:
①Number():用于任何数据类型
如果是Boolean值,true和false分别返回1和0。
如果是数值,简单地传入返回。
如果是null,返回0。
如果是undefined,返回NaN。
如果是字符串:
如果字符串只包含数字(无论正负),将其转换为十进制,忽略前导零。
如果字符串包含有效浮点格式,转换成对应浮点格式,忽略前导零。
如果字符串包含有效16进制,将其转换为相同大小的十进制整数值。
如果字符串为空,将其转换为0。
如果字符串包含除上述格式之外的字符,则将其转换为NaN。
如果是对象:调用valueOf()方法,然后依照前面的规则转换返回值。如果转换结果是NaN,则调用toString()方法,然后再次依照前面规则转换。
②parseInt():忽略字符串前面的空格,直到找到第一个非空格字符。如果第一个字符不是数字字符或者负号,即返回NaN。用parseInt()解析空字符串会返回NaN。如果第一个字符是数字字符,则继续解析第二个字符直到所有的字符被解析完或者遇到了一 个非数字字符。
parseInt()可以解析八进制与十六进制数,在ECMAScript5 JS引擎,parseInt()不具备解析八进制的能力。
可以为parseInt()函数提供第二个参数来指定转换时使用的基数(即多少进制)。如果指定了十六进制,字符串前可以不带0x。
③parseFloat():与parseInt()类似,解析到遇到一个无效的浮点数字符为止,即第二个小数点无效。
始终忽略前导零,十六进制字符串始终被转换成0。只解析十进制。若解析为整数则返回整数。
6、String类型
a、字符字面量:
①包含一些特殊的字符字面量,也叫转义序列,表示非打印字符,或具有其他用途。这些字符字面量可以出现在字符串中的任意位置,而且也被当做一个字符来解析。
②任何字符串的长度都可以通过访问其length属性获得。(若含有双字节字符,则无法返回精确的字符数目)。
b、字符串的特点
①字符串是不可变的,只能销毁与重新填充变量。
c、转换为字符串:
①toString():
数值、布尔值、字符串和对象都有该方法。但是null与undefined没有。
在调用数值的toString()方法时,可以传递一个参数来确定输出数值的基数。
②String():
可以转换任何类型,包括undefined(返回undefined)与null(返回null)。
7、Object类型:
Object的每个实例都有以下属性与方法:
constructor:他的构造函数
hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中是否存在。而非原型中。
isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型。
propertyIsEnumerable(propertyName):用于检查给定属性是否能够使用for-in语句来枚举。
toLocaleString
toString
valueOf
BOM和DOM中的对象都属于宿主对象,可能会也可能不会继承Object。
五、操作符:
1、++ -- 又分别有前置后置,共四个操作符。可用于number、boolean、string、object。
2、+ -操作符。对非数值应用一元加或减操作符时,操作符会像Number()转型函数一样对这个值执行转换
3、布尔操作符:
逻辑非:!
如果操作数是一个对象,返回false。
如果操作数是一个空字符串。返回true。
如果操作数是一个非空字符串。返回false。
如果操作数是一个0,返回true。
如果操作数是任意非零数值(包括Infinity),返回false。
如果操作数是null,返回true。
如果操作数是NaN,返回true。
如果操作数是undefined,返回true。
同时使用两个逻辑非操作符,实际上就会模拟Boolean()转型函数。
逻辑与:&&,可以应用于任何类型的操作数,在第一个操作数不是布尔值得情况下,就不一定返回布尔值。逻辑与操作属于短路操作。
如果第一个操作数是对象,就返回第二个操作数。
如果第二个操作数是对象,则只有在第一个操作数的求值结果为true的情况下才会返回该对象。
如果两个操作数都是对象,则返回第二个操作数。
如果有一个操作数是null,则返回null。
如果有一个操作数是NaN,则返回NaN。
如果第一个操作数是undefined,则返回undefined。
逻辑或:||,可以应用于任何类型的操作数,在有一个操作数不是布尔值得情况下,就不一定返回布尔值。逻辑或操作属于短路操作。
如果第一个操作数是对象,就返回第一个操作数。
如果第一个操作数的求值结果为false,则返回第二个操作数。
如果两个操作数都是对象,则返回第一个操作数。
如果两个操作数都是null,则返回null。
如果两个操作数都是是NaN,则返回NaN。
如果两个操作数都是undefined,则返回undefined。
4、乘性操作符:
①乘法:若某个操作数不是数值,后台会先使用Number()转型函数将其转换。
在处理特殊情况时,遵循下列原则;
如果有一个操作数为NaN,则结果为NaN。
如果Infinity与0相乘,结果为NaN。
如果Infinity与非0相乘,结果为Infinity或-Infinity。
如果Infinity与Infinity相乘,结果是Infinity。
②除法:与乘法类似
在处理特殊情况时,遵循下列原则;
如果有一个操作数为NaN,则结果为NaN。
如果Infinity被Infinity除,结果为NaN。
如果0被0除,结果为NaN。
如果非0有限数被0除,结果为Infinity或-Infinity。
如果Infinity被任何非零数除,结果是Infinity或-Infinity。
③求模:
在处理特殊情况时,遵循以下原则:
如果被除数是无穷大值,除数是有限大数值,则结果是NaN。
如果被除数是有限大数值,而除数是零,则结果是NaN。
如果是Infinity被Infinity除,则结果是NaN。
如果被除数是有限大的数值而除数是无穷大的数值,则结果是被除数。
5、加性操作符:
①加法:
如果是Infinity加-Infinity,结果是NaN。
如果有一个操作数是对象、数值或布尔值,则调用他们的toString()方法取得相应的字符串值,然后拼接。对于undefined与null,调用String()取得相应字符串,然后拼接。
②减法:
如果是Infinity减去Infinity,结果是NaN。
如果是-Infinity减去-Infinity,结果是NaN。
如果是Infinity减去-Infinity,结果是Infinity。
如果是-Infinity减去Infinity,结果是-Infinity。
6、关系操作符:< > <= >=
如果两个操作数都是数值,则执行数值比较。
如果两个操作数都是字符串,则比较两个字符串对应的字符编码值。
如果一个操作数是数值,则将另一个操作数转换为一个数值,然后执行数值比较。
如果一个操作数是对象,调用valueOf()方法,然后依照前面的规则。如果没有valueOf()方法,则调用toString()方法,然后再次依照前面规则比较。
任何操作数和NaN比较,结果都是false。
7、相等操作符:
== :双等号,先转换,在判断。
null与undefined是相等的。
要比较相等性之前,不能将null与undefined转换为其他任何值。
如果有一个操作数是NaN,则相等操作符返回false。不等操作符返回true。两个操作数均为NaN,相等操作符返回false。
如果两个操作数都是对象,若都指向同一个对像,则相等操作符返回true,否则,false。
=== :三等号,仅比较不转换。
8、条件操作符: a ? b : c
六、语句
1、if
2、do-while:后测试循环
3、while:前测试循环
4、for-in:精准的迭代,用来枚举对像属性。(在循环之前,先检测确认该对象的值不是null或undefined)。
5、label语句。配合break与continue使用。高程58页。
6、break continue。
7、with:简化多次编写同一对象的工作。严格模式下不允许使用。
/*第一种写法*/
var qs = location.search.substring(1);
var hostName = location.hostName;
var url = location.url; /*whith写法,与第一种功能相同*/
with(location){
var qs = search.substring(1);
var hostName = hostName;
var url = url;
}
8、switch:每执行完一个case需要break,否则将继续执行下一个case。
七、参数:
ECMAScript中的参数在内部使用一个数组表示,函数接收到的始终是这个数组,而不关心数组中有哪些参数。在函数体内通过arguments对象来访问这个参数数组。arguments对象与数组类似但是不是数组,使用length属性可以确定长度。
arguments的值永远与对应的命名参数保持同步。但是内存空间独立。arguments的长度仅由传入参数的个数决定。没有传递值的命名参数将自动被赋予undefined。
ECMAScript中所有参数的传递都是值。
八、没有重载:两个命名相同的函数,只有后一个有效。
JS高级程序设计学习笔记之第三章基本概念(语法,数据类型,流控制语句,函数)——查漏补缺的更多相关文章
- JS高级程序设计学习笔记1
javascript产生的原因: 在拨号上网时代,表单数据必须发送到服务器端才能验证输入值得有效性,JavaScript的研发就是为了解决这个问题,以便在客户端就验证输入值的有效性. ECMAScri ...
- JS高级程序设计学习笔记之数组
数组创建的方式 var str = new Array();放入数字即为设置数组长度 var str = []; 数组的length可读可写 监测数组 Array.isArray()方法确定某个值是不 ...
- JS高级程序设计学习笔记之JS事件(1)
事件流 冒泡 定义:事件开始时由最具体的元素接收,然后逐级上传到较为不具体的节点.(IE9.FF.Chrome.Safari会将事件一直冒泡到window对象.IE5.5及其以下会跳过<html ...
- JS高级程序设计学习笔记——继承
我们知道,在OO语言中,继承可分为接口继承和实现继承.而ECMAScript的函数没有签名,不能实现“接口继承”,只能通过原型链实现“实现继承”. 在学习了各种继承模式之后,简单总结一下各种继承模式的 ...
- JS高级程序设计学习笔记之基本包装类型
概述 基本类型:string.boolean.number 每当读取一个基本类型的值的时候,后台就会创建一个对应的基本包装类型的对象,从而让我们能够调用一些方法来操作这些数据. 使用new操作符创建的 ...
- JS高级程序设计学习笔记之RegExp类型
创建正则表达式: 字面量形式定义正则表达式: Var expression = / pattern /flags ;pattern部分可以使任意简单或复杂的正则表达式.每个正则表达式可以带有一个或多个 ...
- JS高级程序设计学习笔记之Date类型
日期对象的创建:var now =new Date(),不传递参数时,对象自动获取当前时间.(若要创建特定日期与时间的对象,必须传入该日期距离1970/1/1零点的毫秒数). Date.parse() ...
- asp.net mvc 4 高级编程学习笔记:第三章 视图(1)
1.基础规则 视图的职责是向用户提供用户界面. 视图位于View目录下:有普通的需要控制器渲染的视图,有局部视图,有布局视图等各种视图. 2.视图渲染 控制器默认情况下渲染与控制器同名的目录内的与Ac ...
- JavaScript高级程序设计学习笔记第十五章--使用Canvas绘图
一.基本用法 1.要使用<canvas>元素,必须先设置其 width 和 height 属性,指定可以绘图的区域大小.能通过 CSS 为该元素添加样式,如果不添加任何样式或者不绘制任何图 ...
随机推荐
- JQuery EasyUI 对话框的使用方法
下面看一下EasyUI的对话框效果图 js代码: 复制代码代码如下: <script language="javascript" type="text/javasc ...
- 3.1 as86汇编器
在开始讲述as86汇编器前,这本书引用内核中bootsect.s框架程序汇编代码来解释,记录下这一小段代码中不理解的地方,下面是这段实例代码: .globl begtext, begdata, beg ...
- vsftpd 访问 权限控制
vsftpd 重启命令 service vsftpd start|restart|stop vsftpd 关于权限控制,有两个文件分别设置,都会起作用 /etc/vsftpd/user_list / ...
- JS操作css的float属性的特殊写法
使用js操作css属性的写法是有一定的规律的: 1.对于没有中划线的css属性一般直接使用style.属性名即可. 如:obj.style.margin,obj.style.width,obj.sty ...
- 涂抹Oracle—Flashback
11.1 基于flashback查询过去的数据 a.基于时间的查询(as of timestamp) 构造表falsh_tbl,删除数据然后查询 SQL>select * from flash ...
- 使用Userlock监控用户访问 增强学校网络安全
随着网络技术的不断进步,一方面,拥有广泛教学资源的各大大中院校纷纷升级校园网络技术,保护学校的网络安全.另一方面,网络安全面临的威胁也层出不穷.面对来自网络内外的安全威胁,负责中小学.大学院校网络安全 ...
- Android 查看是否有存储卡插入
String status=Environment.getExternalStorageState(); 2 3 if ( status.equals ( Enviroment.MEDIA_MOU ...
- DPDK2.1 linux上开发入门手册
1引言 本文档主要包含INTEL DPDK安装和配置说明.目的是让用户快速的开发和运行程序.文档描述了如何在不深入细节的情况下在linux应用开发环境上编译和运行一个DPDK应用程序. 1.1文档总览 ...
- Contest - 第10届“新秀杯”ACM程序设计大赛现场热身赛 赛后信息(题解)
Problem Id Title Problem A A+B Problem B 统计字数 Problem C 生日计算 Problem D 冬瓜的寒假之旅 Problem A(略 ...
- window.open的小技巧分享
今天再次谈起window.open是因为发现了一个比较好玩的小技巧,详细内容我们稍后详细说明. 聊到window.open,不得不说明一下他的使用方法,主要有两种形式: win ...