//所有在双斜线之后的内容都属于注释
//仔细阅读这里的注释:它们对JavaScript代码做了解释

//变量是表示值的一个符号名字
//变量是通过var关键字声明的
var x;            //声明一个变量x

//值可以通过等号赋值给变量
x=0;            //现在变量x的值为0
x            // =>0:通过变量获取其值

// JavaScript支持多种数据类型
x=1;            //数字
x=0.01;            //整数和实数共用一种数据类型
x="hello world";    //由双引号内的文本构成的字符串
x='JavaScript';        //单引号内的文本同样构成字符串
x=true;            //布尔值
x=false;        //另一个布尔值
x=null;            //null是一个特殊的值,意思是"空"
x=undefined;        //undefined和null非常类似

//JavaScript中的最重要的类型就是对象
//对象是名/值对的集合,或字符串到值映射的集合
var book ={            //对象是由花括号括起来的
    topic:"JavaScript";    //属性"topic"的值是"JavaScript"
    fat:true        //属性"fat"的值是true
};                //右花括号标记了对象的结束

//通过"."或"[]"来访问对象属性
book.topic            //=>"JavaScript"
book["fat"]            //=>true:另外一种获取属性的方式
book.author="Flanagan";        //通过赋值创建一个新属性
book.contents={}        //{}是一个空对象,它没有属性

//JavaScript同样支持数组(以数字为索引的列表)
var primes=[2,3,5,7];        //拥有4个值的数组,由"["和"]"划定边界
primes[0]            //=>2:数组中的第一个元素(索引为0)
primes.length            //=>4:数组中的元素个数
primes[primes.length-1]        //=>7:数组的最后一个元素
primes[4]=9;            //通过赋值来添加新元素
primes[4]=11;            //或通过赋值来改变已有的元素
var empty=[];            //[]是空数组,它具有0个元素
empty.length            //=>0

//数组和对象中都可以包含另一个数组或对象
var points=[            //具有两个元素的数组
    {x:0,y:0},        //每个元素都是一个对象
    {x:1,y:1}
];
var data={            //一个包含两个属性的对象
    trial1:[[1,2],[3,4]],    //每一个属性都是数组
    trial2:[[2,3],[4,5]]    //数组的元素也是数组
};

//运算符作用于操作数,生成一个新的值
//最常见的是算术运算符
3+2                //=>5:加法
3-2                //=>1:减法
3*2                //=>6:乘法
3/2                //=>1.5:除法
points[1].x-points[0].x        //=>1:更复杂的操作数也能照常工作
"3"+"2"                //=>"32":+可以完成加法运算也可以做字符串连接

//JavaScript定义了一些算术运算符的简写形式
var count=0;            //定义一个变量
count++;            //自增1
count--;            //自减1
count +=2;            //自增2:和"count=count+2;"写法一样
count *=3;            //自乘3:和"count=count*3;"写法一样
count                //=>6:变量名本身也是一个表达式

//相等关系运算符用来判断两值是否相等
//不等、大于、小于运算符的运算结果是true或false
var x=2,y=3;            //这里的=等号是赋值的意思,不是比较相等
x==y                //=>false:相等
x!=y                //=>true:不等
x<y                //=>true:小于
x<=y                //=>true:小于等于
x>y                //=>false:大于
x>=y                //=>false:大于等于
"two"=="three"            //=>false:两个字符串不相等
"two">"three"            //=>true:"tw"在字母表中的索引大于"th"
false==(x>y)            //=>true:false和false相等

//逻辑运算符是对布尔值的合并或求反
(x==2)&&(y==3)            //=>true:两个比较都是true,&&表示"与"
(x>3)||(y<3)            //=>false:两个比较不都是true,||表示"或"
!(x==y)                //=>true:求反

//函数是一段带有参数的JavaScript代码端,可以多次调用
function plus1(x){        //定义了名为plus1的一个函数,带有参数x
    return x=1;        //返回一个比传入的参数大的值
}                //函数的代码块是由花括号包裹起来的部分
plus1(y)            //=>4:y为3,调用函数的结果为3+1

var square=function(x){        //函数是一种值,可以赋值给变量
    return x*x;        //计算函数的值
};                //分号标识了赋值语句的结束
square(plus1(y))        //=>16:在一个表达式中调用两个函数

//当函数赋值给对象的属性,我们称为
//"方法",所有的JavaScript对象都含有方法
var a=[];            //创建一个空数组
a.push(1,2,3);            //push()方法向数组中添加元素
a.reverse();            //另一个方法:将数组元素的次序反转

//我们也可以定义自己的方法,"this"关键字是对定义方法
//的对象的引用:这里的例子是上文中提到的包含两个点位置信息的数组
points.dist=function(){        //定义一个方法用来计算两点之间的距离
    var p1=this[0];        //通过this获得对当前数组的引用
    var p2=this[1];        //并取得调用的数组前两个元素
    var a=p2.x-p1.x;    //X坐标轴上的距离
    var b=p2.y-p1.y;    //Y坐标轴上的距离
    return Math.sqrt(a*a    //勾股定理
     + b*b);        //用Math.sqrt()来计算平方根
};
points.dist()            //=>1.414:求得两个点之间的距离

//这些JavaScript语句使用该语法包含条件判断和循环
//使用了类似C、C++、Java和其他语言的语法
function abs(x){        //求绝对值的函数
    if(x>=0){        //if语句...
        return x;    //如果比较结果为true则执行这里的代码
    }            //子句的结束
    else{            //当if条件不满足时执行else子句
        return -x;
    }            //如果分支中只有一条语句,花括号是可以省略的
}                //注意if/else中嵌套的return 语句

function factorial(n){        //计算阶乘的函数
    var product=1;        //给product赋值为1
    while(n>1){        //当()内的表达式为true时循环执行{}内的代码
        product*=n;    //"product=product*n;"的简写形式
        n--;        //"n=n-1;"的简写形式
    }            //循环结束
    return product;        //返回product
}

factorial(4)            //=>24:1*4*3*2
function factorial2(n){        //实现循环的另一种写法
    var i,product=1;    //给product赋值为1
    for(i=2;i<=n;i++)    //将i从2自增至n
        product*=i;    //循环体,当循环体中只有一句代码,可以省略{}
    return product;        //返回计算好的阶乘
}
factorial2(5)            //=>120:1*2*3*4*5

//定义一个构造函数以初始化一个新的Point对象
function Point(x,y){        //按照惯例,构造函数以大写字母开始
    this.x=x;        //关键字this指代初始化的实例
    this.y=y;        //将函数参数存储为对象的属性
}                //不需要return

//使用new关键字和构造函数来创建一个实例
var p=new Point(1,1);        //平面几何中的点(1,1)

//通过给构造函数的prototye对象赋值
//来给Point对象定义方法
Point.prototype.r=function(){
    return Math.sqrt(    //返回平方根
        this.x*this.x    //this指代调用这个方法的对象
        +this.y*this.y);
};

//Point的实例对象p(以及所有的Point实例对象)继承了方法r()
p.r()                //=>1.414...
<script>
function moveon(){
    //通过弹出一个对话框来询问用户一个问题
    var answer = confirm("Are you ready?");
    //单机“确定”按钮,浏览器会加载一个新页面
    if(answer) window.location="http://taobao.com";
}
//在一分钟后执行定义的这个函数
setTimeout(moveon,60*1000)
</script>
//在document中的一个指定的区域输出调试信息
//如果document不存在这样一个区域,则创建一个
function debug(msg){
    //通过查看HTML元素id属性来查找文档的调试部分
    var log = document.getElementById("debuglog");
    //如果这个元素不存在,则创建一个
    if(!log){
        log = document.createElement("div");    //创建一个新的div元素
        log.id = "debuglog";                    //给这个元素的HTML id赋值
        log.innerHTML = "<h1>Debug Log</h1>";    //定义初始内容
        document.body.appendChild(log);            //将其添加到文档的末尾
    }
    //将消息包装在<pre>中,并添加至log中
    var pre = document.createElement("pre");    //创建<pre>标签
    var text = document.createTextNode(msg);    //将msg包装在一个文本节点中
    pre.appendChild(text);                        //将文本添加至<pre>
    log.appendChild(pre);                        //将<pre>添加至log
}
function hide(e,reflow){                //通过JavaScript操纵样式来隐藏元素e
    if(reflow){                            //如果第二个参数是true
        e.style.display = "none"        //隐藏这个元素,其所占的空间也随之消失
    }
    else{                                //否则
        e.style.visibility = "hidden";    //将e隐藏,但是保留其所占的空间
    }
}

function highlight(e){                    //通过设置CSS类来高亮显示e
    //简单地定义或追加HTML类属性
    //这里假设CSS样式表中已经有"hilite"类的定义
    if(!e.className) e.className = "hilite";
    else e.className +="hilite";
}
//"load"事件只有在文档加载完成后才会触发
//通常需要等待load事件发生后才开始执行JavaScript代码
window.onload = function(){        //当文档加载完成时执行这里的代码
    //找到文档中所有的<img>标签
    var images = document.getElementsByTagName("img");
    //遍历images,给每个节点的"click"事件添加事件处理程序
    //在点击图片的时候将图片隐藏
    for(var i=0;i<images.length;i++){
        var image = images[i];
        if(image.addEventListener)    //注册事件处理程序的另一种方法
            image.addEventListener("click",hide,false);
        else                        //兼容IE8以前版本
            image.attachEvent("onclick",hide);
    }
    //这便是上面注册的事件处理函数
    function hide(event){event.target.style.visibility = "hidden";}
};

JavaScript权威指南(第六版)--JavaScript概述 DEMO的更多相关文章

  1. 《JavaScript权威指南 第六版 中文版》(一)

    <JavaScript权威指南 第六版 中文版> 第二章 词法结构 2.1字符集 JavaScript是使用Unicode字符集编码写的. 2.1.1区分大小写 JavaScript是区分 ...

  2. [在读] javascript权威指南第六版

    耽搁了有大半年没看,记得当时看到5分之2了吧.权威指南是不管读几遍都能觉得有新收获的书^^

  3. Note | Javascript权威指南[第六版] 第1章:Javascript概述

       JavaScript是一门高端的.动态的.弱类型的编程语言,非常适合面向对象和函数式的编程风格.JavaScript的语法源自Java,它的一等函数(first-class function)来 ...

  4. JS 语言核心(JavaScript权威指南第六版)(阅读笔记)

    前言: 对于程序员,学习是无止境的,知识淘换非常快,能够快速稳固掌握一门新技术,是一个程序员应该具备的素质.这里将分享本人一点点不成熟的心得. 了解一门语言,了解它的概念非常重要,但是一些优秀的设计思 ...

  5. JavaScript权威指南第六版(阅读笔记)

    前言: 对于软件行业学习是无止境的,因为知识更替非常快,能够快速稳固掌握一门新技术是一个程序员应该具备的基本素质. 了解一门语言,了解它的概念非常重要,但是一些优秀的设计思想需要细心和大量实践才能慢慢 ...

  6. javascript权威指南第六版学习

    第二章 语法结构 2.1 字符集 什么是字符集?各种字符集什么关系?unicode,utf-8是什么关系? 字符(Character)是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等 ...

  7. Note | javascript权威指南[第六版] 第2章:词法结构

      语法结构规定了诸如变量名是什么样的.怎么写注释,以及程序语句之间如何分隔等规则.本章用很短的篇幅来介绍JavaScript的词法结构.   2.1.字符集   JavaScript程序是用Unic ...

  8. 第六章 对象-javaScript权威指南第六版

    什么是对象? 对象是一种复合值,每一个属性都是都是一个名/值对.原型式继承是javaScript的核心特征. 对象常见的用法有,create\set\query\delete\test\enumera ...

  9. 【读书笔记--cookie】JavaScript权威指南 第六版

    遇到一些问题需要用cookie处理,正好读了一下犀牛书关于cookie的介绍,整理了一些笔记. cookie是指web浏览器存储的少量数据,同时它是与具体的web页面或者站点相关的. cookie数据 ...

  10. 第六章 对象-javaScript权威指南第六版(三)

    6.3 删除内容 delete运算符可以删除对象的属性. delete运算符只能删除自有属性,不能删除继承属性. delete表达式删除成功或没有任何副作用时,它返回true. 6.4 检测属性 用i ...

随机推荐

  1. SQL Server 错误:15023(创建对于用户失败)

    问题: 错误15023:当前数据库中已存在用户或角色 在把远程服务器上的数据库备份还原到本地机后, 给一个"登录"关联一个"用户"时(用户映射),发生错误:“错 ...

  2. Trie

    字典树 class Trie { public: Trie() { root = new Node(); } ~Trie() { destroy(root); } void insert(string ...

  3. centos时间同步方法

    centos时间同步方法 电脑软硬件应用网 45IT.COM 时间:2012-12-08 18:09 作者:李本清 新装的服务器可能设置了错误的,需要调整时区并调整时间.如下是使用NTP来从一个时间服 ...

  4. 百度BAE环境下WordPress安装教程

    不了解代码的童鞋慎重使用这种方法哦,安装过程中可能会出现一些简单的错误. 前两天有位网友在QQ上联系我,他告诉我自己在百度BAE上安装WordPress程序总是出错.我让他按照网络上的教程逐步安装,但 ...

  5. JStack分析cpu消耗过高问题

    Mark一下, 今天确实用这个方法找到了问题 http://www.iteye.com/topic/1114219 1. top找到目标进程,记下pid 2. top –p pid, 并用shift+ ...

  6. OpenMP并行编程

    什么是OpenMP?“OpenMP (Open Multi-Processing) is an application programming interface (API) that support ...

  7. XPS to Blender 2.7x

    XPS to Blender 2.7x(Blender internal the easy way) Things we are gonna need are Blender 2.7x www.ble ...

  8. [have_fun] 好玩哒小游戏又来啦

    联机贪吃蛇,相互厮杀,试一下吧! http://splix.io/

  9. yii2 rbac-plus的使用

    前言 1.本教程适合有RBAC基础,对RBAC有一定了解的同学. 2.本教程使用advanced模板 3.确保数据库中存在user表,没有的同学请查阅文档 运行 php yii migrate 来生成 ...

  10. yum change source repo centos共存安装sun jdk6和jdk7

    之前一直使用的是163的源,今天从微博看到阿里云推出了自己的源.因为我的主机是阿里云,所以可以走内网,速度提升更快.过程如下:cd /etc/yum.repos.d/mv mv CentOS-Base ...