1.语句

ECMAScript中的语句以一个分号结尾;如果省略分号,则由解析器确定语句的结尾,如下例所示:

var sum=a+b //即使没有分号也是有效的语句--推荐
var diff=a-b; //有效的语句--推荐

虽然语句结尾的分号不是必需的,但我们建议任何时候都不要省略它。两个原因:1.加上分号可以避免很多错误 2.加上分号也会在某些情况下增进代码的性能,因为这样解析器
就不必再花时间 推测应该在哪里插入分号了。

2.变量

var message="hi";

像这样初始化变量并不会把它标记为字符串类型,初始化的过程就是给变量赋一个值那么简单。因此,可以在修改变量值的时候修改值的类型,如下所示:

var message="hi";
message=10; //有效,但不推荐

可以像下面那样省略var操作符,从而创建一个全局的变量:

function test(){
message="hi"; //全局变量
}
test();
alert(message): //hi

可以使用一条语句定义多个变量,用逗号分隔:

var message="hi",found=false,age=29;

3.typeof操作符

typeof可以用来检测变量的数据类型。对一什值使用typeof操作符可能返回下列某个字符串
“undefined”---未定义
“boolean”---布尔值
“string”---字符串
“number”---数值
“object”---对象或Null
"function"---函数
下面是几个使用typeof操作符的例子:

var message="some thing";
alert(typeof message); //"string"
alert(typeof (message)); //"string" typeof是操作符而不是函数,圆括号可以使用,但不是必需的
alert(typeof 95); //"number"

4.undefined类型

在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined,例如:

var message;
alert(message==undefined); //true

这个例子与下面是等价的

var message=undefined;
alert(message==undefined); //true

对于一个尚未声明过的变量,只能执行一项操作,即使用typeof操作符检测其数据类型。

var message;
//下面这个变量并没有声明
//var age
alert(age); //产生错误
alert(typeof message); //undefined
alert(typeof age); //undefined

5. Null类型

typof操作符检测null值时会返回“object”

6.boolean类型

boolean类型的值只有两个:true和false。但ECMAScript中所有类型的值都有与这两个boolean等价的值。要将一个值转换为boolean,可以调用转型函数Boolean():

var message="Hi";
var messageAsBoolean=Boolean(message);

7.number类型

八进制的第一位必须是0,然后是八进制数字序列(0-7),如果字面值中的数值超出范围,那么前导零将被忽略,后面的数值当作十进制来解析

var octalNum1=070; //八进制的56
var octalNum2=079; //十进制的79

十六进制前面两位必须是0x,

浮点数值

var floatNum1=1.1;
var floatNum2=0.1;
var floatNum3=.1; //小数点前面没有数据,有效但不推荐

e表示法:var floatNum=3.125e7; //等于31250000
浮点数的精度问题:浮点数的最高精度是17位数,但在进行算术计算时其精度确远不如整数。例如,0.1+0.2的结果不是0.3,而是0.300000000000000004。

这个小小的误差导致无法测试特点的浮点数值,例如:

if(a+b==0.3)
{
alert(“you got a 0.3”);
}

如果这两个数是0.05和0.25,或者0.15和0.15都不会有问题。但如前面所述,如果这两个数是0.1和0.2,那么测试将无法通过

8. NaN

NaN,即非数值(Not a Number),用于表示一个本来要返回数值的操作数未返回数值的情况。
任何涉及NaN的操作(例如NaN/10)都会返回NaN
NaN与任何值都不相等,包括NaN本身。

9.数值转换

Number()函数:如果是null值,返回0;如果是undefined,返回NaN;空字符串,返回0;
parseInt()函数:空字符串会返回NaN. parseInt()能够识别出各种整数格式,如果字符串以“0x”开头且后跟数字字符,就会将其当作一个十六进制整数;
字符串以“0”开头且后跟数字字符,就会将其当作一个八进制整数来解析。例如:

var num1=parseInt("1234blue"); //
var num1=parseInt(""); //NaN
var num1=parseInt("0xA"); //10(十六进制数)
var num1=parseInt("22.5"); //
var num1=parseInt("070"); //56(八进制数)
var num1=parseInt("70"); //70(十进制数)
var num1=parseInt("0xf"); //15(十六进制数)

parseInt()还有第二个参数:转换时使用的基数(即多少进制)。如果知道要解析的值是十六进制,那么就指定基数为16,以保证得到正确的结果。如:

var num1=parseInt("0xaf",16); //

如果指定了第二个参数,字符串可不带前面的0x,如:

var num1=parseInt("af",16); //
var num1=parseInt("af"); //NaN

不指定基数意味着让parseInt()决定如何解析输入的字符串,因此为了避免错误的解析,我们建议无论在什么情况下都明确指定基数。

10. String类型

字符串是不可变的,也就是说,字符串一旦创建,它们的值就不能改变。
数值、布尔值、对象和字符串都有toString()方法,但Null和undefined值没有这个方法。多数情况下,调用toString()方法不必传递参数,但是,在调用数值的toString()方法时
,可以传递一个参数:输出数值的基数。可以输出二进制、八进制、十六进制等 。

var num=10;
alert(num.toString()); //
alert(num.toString(2)); //
alert(num.toString(8)); //
alert(num.toString(10)); //
alert(num.toString(16)); //a

11.操作符

一元加和减操作符:一元加操作符以一个加号表示(+)表示,放在数据面前,对数值不会产生任何影响,如:

var num=25;
num=+num; //25 其实就是一个正号

不过在对非数值应用一元加操作符时,该操作符会像Number()转型函数一样对这个值执行转换。像布尔值false和true将被转换为0和1。
逻辑与(&&)规则:
如果第一个操作数是对象,则返回第二个操作数;
如果第二个操作数是对象,则只有在第一个操作数的求值结果为true时情况下才返回该对象;
如果两个操作都都是对象,则返回第二个操作数;
如果有一个操作数是null,则返回null;
如果有一个操作数是NaN,则返回NaN;
如果有一个操作数是undefined,则返回undefined;
逻辑或(||)规则:
如果第一个操作数是对象,则返回第一个操作数;
如果第一个操作数的求值结果为false,则返回第二个操作数;
如果两个操作都都是对象,则返回第一个操作数;
如果两个操作数是null,则返回null;
如果两个操作数是NaN,则返回NaN;
如果两个作数是undefined,则返回undefined;
可以用逻辑或来为避免为变量赋null或undefined值,如:
var myObject=preferredObject||backupObject; //preferredObject不为null则值为preferredObject,否则为第二个值backupObject
加性操作符:
如果有一个操作数是NaN,则结果是NaN;
如果只有一个操作数是字符串,则将另一个操作数转换为字符串,然后再将两个字符串拼接起来。
忽视加法操作符中的数据类型是ECMAScript编程中最常见的一个错误,看个例子:

var num1=5,num2=10;
var message="the sum of 5 and 10 is"+num1+num2;
alert(message); //"the sum of 5 and 10 is 510"

关系操作符:<,>,<=,>=
如果一个操作数是数值,则将另一个操作数转换为数值,然后执行数值比较。
任何操作数与NaN进行关系比较,结果都是false.

var result=NaN<3; //false

相等操作符:
null和undefined是相等的。
全等和不全等:全等操作符由3个等于号(===)表示,它只在两个操作数未经转换就相等的情况下返回true,如下面所示:

var result=("55"==55); //true,因转换后相等
var result=("55"===55); //,因转换后相等

逗号操作符:
用于赋值时,逗号操作符总会返回表达式中的最后一项,如下面的例子所示:

var num=(5,1,8,4,0);//num的值为0

12.语句

for语句
由于ECMAScript中不存在块级作用域,因此在循环内部定义的变量也可以在外部访问到,如:

var count=10;
for(int i=0;i<count;i++)
{
alert(i);
}
alert(i); //

for语句中的初始化表达式、控制表达式和循环后表达式都是可选的。将这三个表达式全部省略,就会创建一个无限循环,如:

for(;;){
doSomething();
}

for-in 语句
ECMAScript对象的属性没有顺序。因此,通过for-in循环输出的属性名的顺序是不可预测的。具体来说,所有属性都会被返回一次,但返回的先后次序可能会因浏览器而异。
break和continue语句
break和continue语句都可以与label语句联合使用,从而返回代码中特定的位置。这种联合使用的情况多发生循环嵌套的情况下,如下所示:

var num=0;
outermost:
for(var i=0;i<10;i++){
for(var j=0;j<10;j++){
if(i==5&&j==5){
break outermost;
}
num++;
}
}
alert(num); //

with语句
with语句的作用是将代码的作用域设置到一个特定的对象中,由于大量使用with语句会导致性能下降,同时也会给调试代码造成困难,因此在开发大型应用程序时,不建议使用with语句。
switch语句
switch语句在比较值时使用的是全等操作符,因此不会发生类型转换(例如,字符串“10”不等)

13.函数

函数return语句也可以不带任何返回值,在这种情况下,函数在停止执行后将返回unedfined。
理解参数:函数的参数与大多数其他语言的参数不同。ECMAScript函数不介意传递进来多少个参数,也不在乎传进来参数是什么数据类型。也就是说,即使你定义的函数只接收
两个参数,在调用这个函数时也未必一定要传递两个参数,可以传递一个、三个甚至不传参数,而解析器永远不会有什么怨言。之所以这样,是因为ECMAScript中的参数在内部
是通过一个数组来表示的。函数接收到的始终都是这个数组,而不关心数组中包含哪些参数(如果有参数的话)。实际上,在函数体内可以通过arguments对象来访问这个数组,从
而获取传递给函数的第一个参数。
如果只传入了一个参数,那么arguments[1]设置的值不会反应到命名参数中,这是因为arguments对象的长度是由传入参数个数决定的,不是由定义函数的命名参数决定的。
函数没有重载。

JavaScript高级程序设计学习笔记--基本概念的更多相关文章

  1. JavaScript高级程序设计---学习笔记(一)

    今天,2017.3.17开始利用课余时间仔细学习<JavaScript高级程序设计>,将需要掌握的知识点记录下来,争取把书里的所有代码敲一遍并掌握. 1.标识符命名最好是第一个字母小写,剩 ...

  2. javascript高级程序设计学习笔记

    javascript高级程序设计,当枕头书已经好久了~zz  现在觉得自己在js的开发上遇到了一些瓶颈,归根究底还是基础太薄弱,所以重新刷一遍js高程希望有更新的认识. 一.javascript简介 ...

  3. JavaScript高级程序设计学习笔记--函数表达式

    关于函数声明,它的一个重要特征就是函数声明提升,意思是在执行代码之间会读取函数声明,意思是在执行代码之前会先读取函数声明.这就意味着可以把函数声明放在调用它的语句 后面. sayHi(); funct ...

  4. JavaScript高级程序设计---学习笔记(三)

    函数表达式 定义函数的方式有两种:一种是函数声明,另一种是函数表达式. 关于函数声明,它的一个重要特征就是函数声明提升,意思是在执行代码之前会先读取函数声明所以可以把函数声明放在调用它的语句后面. 而 ...

  5. JavaScript高级程序设计学习笔记第三章--基本概念

    一.标识符: 1.区分大小写 2.命名规则: 第一个字符必须是一个字母.下划线(_)或一个美元符号($) 其他字符可以是字母.下划线.美元符号或数字 标识符中的字母也可以包含扩展的 ASCII 或 U ...

  6. JavaScript高级程序设计---学习笔记(二)

    面向对象程序设计1.属性类型.定义多属性.读取属性特性对象的属性在创建时都带有一些特征值,JavaScript通过这些特征值来定义它们的行为.这些特性是为了实现JavaScript引擎用的,因此不能直 ...

  7. JavaScript高级程序设计学习笔记--面向对象的程序设计(二)-- 继承

    相关文章: 面向对象的程序设计(一) — 创建对象 http://www.cnblogs.com/blackwood/archive/2013/04/24/3039523.html 继承 继承是OO语 ...

  8. Javascript高级程序设计学习笔记一

    看完w3school的javascript的概念,有点基础,开始红皮书的路程,今晚总结前二章的心得. 第一章:javascript简介 重点是javascript的实现是由 ECMAScript(核心 ...

  9. javascript 高级程序设计 学习笔记

    <!--<script> // 异步请求封装 IE6即以上浏览器 // ajax(url,fnSucc,selectID,fnFaild) //url 请求地址 //fnSucc 异 ...

随机推荐

  1. PHP无限极分类生成树方法,无限分级

    你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了.这是我在OSChina上看到的一段非常精简的PHP无限极分类生成树方法,巧在引用,整理分享了. function g ...

  2. 响应式Web初级入门

    本文来自我的前端博客,原文地址:http://www.hacke2.cn/about-responsive/ 跨终端时代的到来 当你乘坐各种交通工具(公交.地铁.轻轨.火车)时你会发现,人们都个个低下 ...

  3. 使用type="redirect"重定向,传递List等变量到jsp页面的问题

    Struts2在提交表单的时候,使用「type="redirect"」重定向到相应的jsp页面. Action中的List表单是无法传到相应的jsp页面. 我猜测是因为List作为 ...

  4. HDOJ 4336 Card Collector

    容斥原理+状压 Card Collector Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  5. brew gradle

    cat /usr/local/Library/Taps/homebrew/homebrew-versions/gradle221.rb GRADLE_HOME=/Users/temp/gradle22 ...

  6. qt 的简介与使用

    1.图形类的构造,都是通过类的构造函数以及界面初始化这两部分 2.在qtcreator的界面编辑器通过“提升类”的方法,要确定头文件的路径是否正确 3.点击窗口关闭时,销毁窗口内容时,设置属性-> ...

  7. Windows下几个常用的和进程有关的命令

    在windows下,进入cmd,有几个常用的和进程有关的命令: netstat -ano:查看所有进程 netstat -ano|findstr  “端口号”:查看端口号对应的进程PID taskli ...

  8. springmvc之图片上传

    1.接收到的是图片的流时 //上传头像 @RequestMapping(value = "/uploadHeadSculpture", method = RequestMethod ...

  9. HDU 1085 Holding Bin-Laden Captive!(DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1085 解题报告:有1,2,5三种面值的硬币,这三种硬币的数量分别是num_1,num_2,num_5, ...

  10. OpenCV成长之路(5):图像直方图的应用

    正如第4篇文章所说的图像直方图在特征提取方面有着很重要的作用,本文将举两个实际工程中非常实用的例子来说明图像直方图的应用. 一.直方图的反向映射. 我们以人脸检测举例,在人脸检测中,我们第一步往往需要 ...