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. Materialize一款不错的框架(装逼必备,想想一帮渣渣们还在说bootstrap的时候,你用materialize,高端洋气,别人仰望着,同事们鄙视的看着你还能不能愉快的玩耍的时候,那种孤高的感觉!-_-//意淫结束)

    这个materialize感觉比bootstrap好一点 当然啦中文文档还木有!所以想搞个materialize中文网的可以抢先咯! materialize是谷歌设计制作的一款框架. HOHO,出去别 ...

  2. 自己总结的USB数据结构及其描述符

    背景: USB理论知识光看着空想总觉着丢三落四,好像哪里没法理解到位,自己做个总结. 正文: 1. USB通信的最基本单位是“包”.如果把“包”肢解的话,可以分为各种“域”(7类,即一串二进制数.每类 ...

  3. mysql的隐式转化

    MySQL隐式转化整理 前几天在微博上看到一篇文章:价值百万的 MySQL 的隐式类型转换感觉写的很不错,再加上自己之前也对MySQL的隐式转化这边并不是很清楚,所以就顺势整理了一下.希望对大家有所帮 ...

  4. Android在TextView中实现RichText风格

    参考: Android实战技巧:用TextView实现Rich Text---在同一个TextView中设置不同的字体风格 Demo: private SpannableStringBuilder c ...

  5. JQuery在asp.net中三种ajax传值

    1)通过webservice,注意去掉注释[System.Web.Script.Services.ScriptService]这行前的注释 2)通过aspx.cs文件中的静态方法 3)通过aspx文件 ...

  6. js搜索框输入提示(高效-ys8)

    <style type="text/css"> .inputbox .seleDiv { border: 1px solid #CCCCCC; display: non ...

  7. Code First04---关于上下文DbContext

    这章主要讲怎么配置DbContext的子类访问的数据库的位置. 我相信大家最经常使用的数据库位置的配置方式就是配置文件了,也就是通过App.Config 或Web.Config来配置要访问的数据库. ...

  8. iOS开发——UI进阶篇(四)tableView的全局刷新,局部刷新,左滑操作,左滑出现更多按钮,进入编辑模式,批量删除,自定义批量删除

    首先创建项目,在storyboard如下布局控件,设置好约束 然后创建cell模型类XMGWineCell数据模型类XMGWine创建UITableView,设置数据源协议,实现数据源方法懒加载数据这 ...

  9. iOS开发——UI基础-懒加载,plist文件,字典转模型,自定义view

    一.懒加载 只有使用到了商品数组才会创建数组 保证数组只会被创建一次 只要能够保证数组在使用时才创建, 并且只会创建一次, 那么我们就称之为懒加载 lazy - (void)viewDidLoad 控 ...

  10. leetcode 236. Lowest Common Ancestor of a Binary Tree

    Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According ...