javascript学习日记——(1)

1.1    Javascript诞生于1995年。它的主要目的是处理以前由服务器语言(如Perl)负责的一些输入验证操作。


1.2    Javascript虽然和ECMAScript通常都被人们用来表达相同的含义,但Javascript的含义却比ECMA-262中规定的要多得多。一个完整的Javascript实现应该由下列三个不同的部分组成。——核心(ECMAScript)+文档对象模型(DOM)+浏览器对象模型(BOM)


总结:Javascript是一种专为与网页交互而设计的脚本语言。


2.1    <script>元素——向HTML页面中插入Javascript的主要方法,就是使用<script>元素。它有下列4个常用属性。

                 async:可选。表示应该立即下载脚本,但不应该妨碍页面中的其他操作,比如下载其他资源或等待加载其他脚本。只对外部脚本文件有效。

                 defer: 可选。表示脚本可以延迟到文档完全被解析和显示之后再执行。只对外部脚本文件有效。

                 scr:    可选。表示包含要执行代码的外部文件。

                 type:  可选。不填的话默认值也是text/javascript。


async和defer使用方法:

<script type="text/javascript" src="js/1.js" defer></script>

<script type="text/javascript" src="js/1.js" async></script>

相同点:

1.都只适用于外部脚本

2.如果定义了load事件,会在load事件之前执行                   //load事件会在网页所有内容加载完成才会执行

不同点:

1.defer属于延迟加载,而async属于异步加载

2.defer会等文档解析完成之后再执行js

3.async下载完毕立即解释执行代码       

4.defer所有浏览器都支持,async是HTML5定义的新属性,需要IE10以上版本

5.多个声明了async的脚本不保证执行顺序,如果项目中脚本之间存在依赖关系,不推荐使用async

2.1.1    按照传统做法,所有<script>元素都应该放在页面的<head>元素中,意味着所有的Javascript都解析和执行完成之后才能显示页面内容,为了加载速度建议放在</body>元素前即可。


2.2    在HTML中嵌入Javascript代码虽然没有问题,但一般认为最好的方法还是使用外部文件来包含Javascript。它有以下优点。

1.可维护性——遍及不同HTML页面中的代码维护很麻烦,把他们都放在一个文件夹方便维护。而且开发人员可以在不触及HTML标记的情况下,集中精力编辑Javascript代码。

2.可缓存——浏览器能够根据具体的设置缓存链接的所有外部Javascript文件。也就是说多个页面使用同一个文件只需要下载一次,可以加快页面加载速度。

3.适应未来——通过外部文件来包含Javascript无须兼容xhtml或注释hack。       //xhtml下编码要求比较严格 如a>5需写成a&gt;5;或者禁用js的页面不会出现错误。


2.3    文档模式(doctype)不声明的的情况下网页以混杂模式运行,声明之后网页将以标准模式运行。混杂模式不推荐使用

如<!--  HTML 5  -->

<!DOCTYPE html>


3    语法


3.1    ECMAscript中的一切都区分大小写(变量、函数名和解析名),变量 test 和变量 Test 是两个不同的变量。

3.2    标识符指变量、函数、属性的名字,或者函数的参数。标识符的第一个字符必须是一个字母、下划线(_)或一个美元符号($),其他字符可以是字母、下划线、美元符号或数字。按照惯例标识符的第一个字母小写,剩下的每个单词的首字母大写  如:firstSecond。

3.3    注释  

// 单行注释

/*  多行注释 */

3.4    严格模式        在严格模式下,ECMAScript3中的一些不确定的行为将得到处理,而且对某些不安全的操作也会抛出错误。要在整个脚本中启用严格模式,可以在顶部添加以下代码:  "use strict";

可以指定某个函数在严格模式下执行: 

function doSomeThing (){

"use strict";

//函数体

}

3.5    建议每个ECMAScript中的语句以一个分号结尾; var diff=a-b;

3.6   关键字和保留字

 ECMA-262 描述了一组具有特定用途的关键字。这些关键字可用于表示控制语句的开始或结束,或者用于执行特定操作等。按照规则,关键字也是语言保留的,不能用作标识符。以下就是ECMAScript的全部关键字(带*号上标的是第5 版新增的关键字):

breakdoinstanceoftypeof
caseelsenewvar
catchfinallyreturnvoid
continueforswitchwhile
debugger*functionthiswith
defaultifthrowdelete
intry  

ECMA-262 还描述了另外一组不能用作标识符的保留字。尽管保留字在这门语言中还没有任何特定的用途。但它们有可能在将来被用作关键字。以下是ECMA-262 第3 版定义的全部保留字:
abstractenumintshort
booleanexportinterfacestatic
byteextendslongsuper
charfinalnativesynchronized
classfloatpackagethrows
constgotoprivatetransient
debuggerimplementsprotectedvolatile
doubleimportpublic 

第5 版把在非严格模式下运行时的保留字缩减为下列这些:
classenumextendssuper
constexportimport 

在严格模式下,第5 版还对以下保留字施加了限制:
implementspackagepublicinterface
privatestaticletprotected
yield   

注意, let 和yield 是第5 版新增的保留字;其他保留字都是第3 版定义的。为了最大程度地保证兼容性,建议大家将第3 版定义的保留字外加let 和yield 作为编程时的参考。

3.7变量

ECMAScript的变量是松散类型的,就是可以保存任何类型的数据。

var message;    //这行代码定义了一个名为message的变量,该变量可以用来保存任何值(这样没有经过初始化的变量,会保存一个特殊的值——undefined)

var message="hi";   //这行代码变量message保存了一个字符串值"hi"

var message="hi";

message=100;     //有效,但不推荐               变量message先保存了一个字符串值"hi",然后该值又被一个数字值100取代。


function test() {

var message="hi";          //局部变量

}

test();  

alert(message);      //错误!         局部变量在函数退出后就会被销毁


function test() {

message="hi";          //全局变量

}

test();  

alert(message);      /hi         省略var操作符可以定义全局变量,但是不推荐这种做法,全局变量定义在局部作用域里很难维护

调用过一次test() 函数,这个变量有了定义,就可以在函数外部的任何地方被访问到。


var message="hi",

      found = false,

     age = 29;              //可以一次性定义多个变量,每个变量用逗号分隔开


3.8    数据类型

ECMAScript有5基本数据类型:Undefined、Null、String、Number、Boolean还有1种复杂数据类型——Object,Object本质上是由一组无序的名值队组成的。

3.9    typeof操作符——用来监测给定变量的数据类型

  • “boolean":如果变量是布尔值
  • "function":如果变量是函数
  • "number”:如果变量是数值
  • “object":如果变量是对象或null
  • "string”:如果变量是字符串
  • "undefined":如果 变量未定义
var message="hi";

var arr1=[1,2,3,4];

alert(typeof message);          //string

alert(typeof 90);          //number

alert(typeof arr1);       //object   typeof null 返回的值也是object

alert(typeof true)       //boolean

alert(typeof window)    //function

alert(typeof sss)         //undefined           sss未声明


3.10 Undefined类型

undefined类型只有一个值,即特殊的undefined。在使用var声明变量打未赋值时这个变量的值就是undefined,

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

不过,包含undefined值的变量与尚未定义的变量还是不一样的。

如:var message;

alert(message);       //undefined

alert(age);               //报错


typeof运算符检测数据类型时候会出现一个问题

var message;

alert(typeof message);          //undefined

alert(typeof age);                  //undefined        此处是语言设计者的问题


3.11    Null类型

Null类型是第二个只有一个值的数据类型,这个特殊的值是Null。 从逻辑角度看,null值表示一个空对象指针,所以typeof操作符检测null值时会返回"object"。

如果定义的变量准备在将来保存对象,那么最好将该变量初始化为null,这个月只需要检查null值就可以知道相应的变量是否已经保存为一个对象的引用。

如:if(car != null){

//对car对象进行操作

}

undefined值派生自null值,所以alert(undefined==null);   //true

3.12    Boolean类型

Boolean类型是ECMAScript中使用最多的一种类型,该类型只有两个字面值:true和false。这两个值和数字值不是一回事,因此true不一定等于1,false也不一定等于0。下面是为变量赋Boolean类型值的例子。

如:var found=true;

       var  lost=false;

boolean类型的字面值true和false是区分大小写的。True和False都不是Boolean值,只是标识符。

数据类型        转换为True的值                          转换为False的值

Boolean         True                                            False

string              任何非空字符串                         "" 空字符串

Number          任何非零数字(包括无穷大)    0和NaN

Object            任何对象                                      null

Undefined      不适用                                         undefined  

这些转换规则对理解流控制语句(如if语句)自动执行相应的Boolean转换非常重要。

如:   var message="Helllo World";

if(message){

alert("value is true");

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为减少 js 关键词的占用,此文件只占用“c$”一个关键词; * 使用时用: c$.函数名(参数列表); 或者 c$().函数名(参数列表) * 字符串操作函数、日期操作函数、数组操作函数等,直接增加到 String、Date、Array 类里面,便于直接使用 */ /** * 获取元素,或者在DOM加载完成时执行某函数 * @param arg 此参数为字符串时,认为是 c$.getElement 的缩写,用来获取元素。用法参考 c$.getElement * 如果 arg 是 function 则认为是 c$.ready 的缩写,在dom加载完成时执行。没有此参数则返回 c$ 对象。 * @param dom 需要选择的DOM对象,默认是 window.document * @return 没有arg参数时返回 c$ 对象,arg参数是字符串时返回查询的元素,arg参数是函数时没有返回内容。 * * @example * c$("mytext") // 返回 id 或者 name 为"mytext"的元素 * c$("#mytext") // 返回 id 为"mytext"的元素 * c$("@mytext") // 返回 name 为"mytext"的所有元素 * c$(".class1") // 返回 class 为"class1"的所有元素 * c$("$div") // 返回 标签 为"div"的所有元素 * c$("$div #text1") // 返回 div 标签里面 id 为"text1"的元素(支持多级查询,以空格分隔) * c$(function(){alert('执行DOM加载完成事件');}); // 为 c$.ready(fun) 的缩写 * * c$.函数名(参数列表) // 调用这工具类里面的函数 * c$().函数名(参数列表) // 调用这工具类里面的函数 */ var c$ = window.c$ = function(arg, dom) { // 如果没有参数,则返回 本对象;让程序可以这样写: c$().函数名(参数列表) if (arguments.length === 0) return c$; if (typeof arg == 'function') return c$.ready(arg); // 有参数则调用获取元素的函数,为 c$.getElement 的缩写 return c$.getElement(arg, dom); }; /** * 这是错误调试程序 * 当页面发生错误时,提示错误讯息;仅测试环境里会提示,正式环境下不提示错误。 * 注意:chrome、opera 和 safari 浏览器不支持 onerror 事件 * @param msg 出错讯息 * @param url 出错档案的地址 * @param sLine 发生错误的行 * @return true 返回true,会消去 IE下那个恼人的“网页上有错误”的提示 */ window.onerror = function(msg, url, sLine) { // 测试时可以提示出错信息;正式发布时不提示 if (c$.isTest) { var errorMsg = "当前页面的javascript发生错误.\n\n"; errorMsg += "错误: " + msg + "\n"; errorMsg += "URL: " + url + "\n"; errorMsg += "行: " + sLine + "\n\n"; errorMsg += "点击“确定”消去此错

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值