1、在html中使用JavaScript

1、  <script> 元素

<script>定义了下列6个属性:

async:可选,异步下载外部脚本文件。

charset:可选,通过src属性指定代码的字符集,大多浏览器会忽略这个值,所以很少人使用

language:已放弃

src:可选,外部脚本的地址

type:可选,现在不推荐用“text/javascript”,考虑到约定俗成和最大限度的浏览器兼容,目前type属性的值还是text/javascript,不过,这个属性并不是必需的,不设置值默认是text/javascript。

在解析器对<script>元素内部的所有代码求值完毕以前,页面的其余内容都不会被浏览器加载或显示。

按照惯例,所有的script元素都应该在页面的head元素中,但这种做法会导致要等全部JavaScript代码都被下载、解析和执行完成以后,才能开始呈现页面的内容,所以无疑会导致浏览器在呈现页面的时候出现明显的延迟,而延迟期间的浏览器窗口中将是一片空白,为了避免这个问题,现代web应用程序一般都把全部JavaScript引用放到body元素中页面的内容之后,

延迟加载

Html4.0为script标签定义了defer属性,这个属性用途是表明脚步在执行时不会影响页面的构造,就是脚步会延迟到整个页面都解析完毕后再运行。

Html5规范要求脚本安装他们出现的先后顺序执行,单在现实中,延迟脚本不一定会安装顺序执行,因此最好只包含一个延迟脚本,ie4、firefox3.5、safari 5和Chorme是最早支持defer属性的浏览器,其他浏览器会忽略这个属性,像平常一样处理脚本,为此,把延迟脚本放到页面的底部仍然是最佳选择。

异步脚本

Html5为script元素定义了async属性,就是异步加载,当然缺点也和ajax的异步请求一样,你无法确定脚本的执行顺序。异步脚本一定会再页面的load时间执行之前运行,单可能会再domconrentloaded(就是onload和jQuery ready的区别)事件触发之前或之后执行,支持异步脚本的浏览器有firefox3.6、safari5和chrome。

嵌入代码与外部文件

在html中嵌入JavaScript代码虽然没有问题,但一般认为最好的做法还是尽可能使用外部文件来包含JavaScript代码,不过,并不存在必须使用外部文件的硬性规定(还是要看具体实际项目的具体情况,JavaScript的代码不是很多改成嵌入式对页面的影响也不是很大,加上现在电脑硬件设备越来越好,对于性能的消耗微乎其微,而且嵌入式同时也节省了请求,所以没必要一定要求就是引用外部文件,上次面试,面试官听到我一个项目用到的是嵌入式马上表现出鄙视是态度,我只想说用什么方式要看项目的侧重点,随便鄙视是你人品有问题),但支持使用外部文件的人多强调如下优点:

  • 可维护性:遍及不同的html页面的JavaScript会造成维护问题,但把所有JavaScript文件都放在一个文件夹中,维护起来就轻松多了,
  • 可缓存:浏览器能够根据具体的设置缓存链接的所有外部JavaScript文件。
  • 适应未来:通过外部文件包含JavaScript无须使用前面提到xhtml或者注释back。

文档模式

Ie5引入了文档模式的概念:而这个概念是通过使用文档类型切换实现的,最初的两种文档模式是:混杂模式(quirks mode)和标准模式(standards mode)。混杂模式会让ie的行为与(包含非标准特性的)ie5相同,而标准模式则让ie的行为更接近标准行为。虽然这两种模式主要影响css内容的呈现,单在某些情况下也会影响到JavaScript的解释执行。

在ie引入文档模式的概念后,其他浏览器也纷纷效仿,在此之后,ie又提出一种所谓的准标准模式(almost standards mode)。这种模式下的浏览器特性有很多都是符合标准的,单也不尽然,不标准的地方主要体现在处理图片间隙的时候(在表格中使用图片时问题最明显)。

如果在文档开始处没有发现文档类型声明,则所有浏览器都会默认开启混杂模式,单采用混杂模式不是什么值得推荐的做法,因为不同浏览器在这种模式下的行为差异飞车打,如果不使用hack(就是css的某些属性初始化赋值)技术,跨浏览器的行为根本就没有一致性可言。

<!-- HTML 4.01 严格型-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <!-- XHTML 1.0 严格型 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<noscript>元素:这个很少有人用,就不记录了,有兴趣的可以去JavaScript高级编程设计第三版上看。

2、基本概念

(一些基本的简单语法我这里就不在记录下来了,只记录一些我觉得重要的一些知识点)

严格模式:

Es5(ECMAScript 5)引入了严格模式概念,严格模式是为JavaScript定义了一种不同的解析和执行模型,在严格模式下,es3中的一些不确定的行为将得到处理,而且对某些不安全的操作也会抛出错误,要在整个脚本中启用严格模式,可以再顶部添加如下代码:

“use strict”;

它是一个编译指示,用于高速支持的JavaScript引擎切换到严格模式。

严格模式下,JavaScript的执行结果会有很大不同,因此本书将会随时指出严格模式下的区别,支持严格模式的浏览器包括ie10+,firefox4+、safari5+、opera 12+和chrome。

数据类型:es中5种数据类型(也称为基本数据类型):undefined、null、boolean、number、string和object,object本质上是由一组无序的名值对组成的,es不支持任何创建自定义类型的机制,而所有值最终将是上述6种数据类型之一。

Typeof操作符

使用typeof操作符可能返回下列某字符串:

“undefined”:undefined类型

“boolean”:布尔类型

“string”:字符串类型

“number”:数值类型

“function”:函数

“object”:对象或null

Undefined类型

Undefined类型只是一个值,在使用var声明变量但未对其加以初始化时,这个变量的值是undefined

注:对未初始化的变量执行fypeof操作符会返回undefined值,而对未声明的变量执行typeof操作符同样也会返回undefined值,如下代码:

Var message;

Alert(typeof message); //”undefined”

Alert(typeof age);//”undefined”

Null类型:

Null表示一个空对象指针,在使用typeof检测null时会返回”object”.

如果定义的变量准备在将来用于保存对象,那么最好将变量初始化为null而不是其他值,这样一来只要直接检查null值就可以知道相应的变量是否已经保存了一个对象的引用(但个人觉得其实也可以不初始化,因为在判断上null==undefined的,所以用于检查的null和undefined的基本是一样的).

Boolean类型

注意:boolean类型的字面值true和false是区分大小写的,也就是说,True和False都不是Boolean值,

虽然boolean类型的字面值只有两个,但es中所有类型的值都有与这两个boolean值等价的值,可以调用Boolean()函数转换.

数据类型

转换为true的值

转换为false值

Boolean

True

False

String

任何非空字符串

空字符串

Number

任何非零数字值

0和NaN

Object

任何对象

Null

Undefined

Undefined

Number类型

  1. NaN

NaN,即非数值是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况,NaN本身有两个非同寻常的特点,第一:任何涉及NaN的操作都会返回NaN,第二:NaN与任何值都不相等.

针对NaN的两个特点,es定义了isNaN()函数,这个函数接受一个参数,该参数可以是任何类型,而函数会帮我们确定这个参数是否”不是数值”. isNaN()在接收一个值之后会尝试能不能把这个值转换成数值,在检测.

  1. 数值转换

有3个函数可以吧非数值转换为数值:Number(),parseInt()和parseFloat()

Number()函数的转换规则:

  • 可以接收任何类型参数
  • 如果是Boolean值,true和false转换为1和0;
  • 如果是数值,只是简单的传入和返回;
  • 如果是null值,返回0;
  • 如果是undefined,返回NaN;
  • 如果是字符串,遵循下列规则:
  1. 如果是字符串中只包含数字,则将其转换为十进制值;
  2. 如果字符串中包含有效的浮点格式,则将其转换为对应的浮点值;
  3. 如果字符串包含有效的十六进制格式,则将其转换为相同大小的十进制值;
  4. 如果字符串是空的,则转换为0
  5. 如果字符串包含除上述之外的字符,则转换为NaN;
  • 如果是对象,则会调用对象的valueOf()方法,然后依照前面的规则转换返回的值,如果转换的结果是NaN,则调用对象的toString()方法,然后再次依照前面的规则转换返回的字符串值;

javascript高级编程笔记01(基本概念)的更多相关文章

  1. javascript高级编程笔记02(基本概念)

    ParseInt()函数: 由于Number函数在转换字符串时比较复杂而且不合理,我们常常转换字符串都用parseInt函数, Parseint函数规则: 忽略字符串前面的空格,直到找到第一个非空格字 ...

  2. javascript高级编程笔记04(基本概念)

    Function类型 Es5中规范了另一个函数对象的属性:caller,这个属性中保存着调用当前函数的函数的引用,如果是在全局作用域中调用当前函数,这它的值为null function outer() ...

  3. javascript高级程序设计--笔记01

    概述 JavaScript的实现包含三个部分: 1  核心(ECMAScript)   提供核心语言功能 2  文档对象模型(DOM)  一套提供了访问以及操作网页内容的API 3  浏览器对象模型( ...

  4. javascript高级编程笔记05(面向对象)

    面向对象设计 es中有两种属性:数据属性和访问器属性 数据属性: 数据属性包含一个数据值的位置,在这个位置可以读取和写入值,数据属性有4个描述其行为的特性 [[Configurable]]:表示能否通 ...

  5. javascript高级编程笔记06(面相对象2)

    1)  构造函数模式 es中的构造函数可以用来创建特定类型的对象,像Object和Array这样的原生构造函数,在运行时会自动出现在执行环境中,此外,也可以创建自定义的构造函数,从而定义自定义对象类型 ...

  6. javascript高级编程笔记03(正则表达式)

    引用类型 检测数组 注:我们实际开发中经常遇到要把数组转化成以逗号隔开,我以前都是join来实现,其实又更简单的方法可以用toString方法,它会自动用逗号隔开转换成字符串,其实toString内部 ...

  7. Android高级编程笔记(四)深入探讨Activity(转)

    在应用程序中至少包含一个用来处理应用程序的主UI功能的主界面屏幕.这个主界面一般由多个Fragment组成,并由一组次要Activity支持.要在屏幕之间切换,就必须要启动一个新的Activity.一 ...

  8. JavaScript高级编程———JSON

    JavaScript高级编程———JSON < script > /*JSON的语法可以表达一下三种类型的值 简单值:使用与javas相同的语法,可以在JSON中表达字符串.数值.布尔值和 ...

  9. JavaScript高级编程———基本包装类型String和单体内置对象Math

    JavaScript高级编程———基本包装类型和单体内置对象 <script> var stringObject = new String("hello world") ...

随机推荐

  1. CMake的一些使用

    1. 使用QT加载CMake工程 打开QT,"文件"->"打开文件或项目"->选中CMakeLists.txt文件,出现对话框,单击下一步,点击&q ...

  2. java程序员菜鸟进阶(十五)linux基础入门(三)linux用户和组管理

    我们大家都知道,要登录linux操作系统,我们必须要有一个用户名和密码.每一个用户都由一个惟一的身份来标识,这个标识叫做用户ID.系统中的每一个用户也至少需要属于一个"用户分组". ...

  3. (转载)mysql decimal、numeric数据类型

    (转载)http://www.cnblogs.com/qiantuwuliang/archive/2010/11/03/1867802.html 可能做程序的人都知道,float类型是可以存浮点数(即 ...

  4. CC++初学者编程教程(2) Microsoft Visual C++ 6.0开发环境搭建

    上一篇演示的是如何安装VS2010,本文演示的是如何安装Microsoft Visual C++ 6.0 简称VC6. 有同学经常VC6都是很古董的版本了,为啥他还存在,不得不说VC6是微软一个很经典 ...

  5. BZOJ 1207: [HNOI2004]打鼹鼠( dp )

    dp.. dp[ i ] = max( dp[ j ] + 1 ) ------------------------------------------------------------------ ...

  6. 一个问题:关于finally中return吞掉catch块中抛出的异常

    今天遇到一个感觉很神奇的问题,记录一下问题以及自己分析问题的思路. 预警:不知道怎么看java字节码的朋友可能需要先看一下如何阅读java字节码才能看懂后面的解释. 我有一段程序: public cl ...

  7. 处理jQuery append加入的元素 绑定事件无效的方法

    通过jquery append(或者before.after,一样)新添加进网页的元素,常用的事件不能触发,比如:append了id 为 abc 的元素,那么 $(#abc).click(functi ...

  8. C++设计模式——桥接模式

    问题描述 现在要去画一个图形,图形有长方形.圆形和扇形等等:而图形又可以加上不同的颜色,然后,我们就可以画出红色的长方形,绿色的长方形:红色的圆形,绿色的圆形等等.而这种图形的形状在变化,图形的颜色也 ...

  9. es基本查询相关的

    一.获取索引的mapping GET linewell_assets_mgt_es/lw_devices/_mapping

  10. Android 输入法遮挡问题

    在Android系统中,由于手机屏幕大小的限制,一般需要字符输入的时候,弹出的输入法面板往往会占据大半个屏幕,如果输入框正好在下方,那经常会出现被输入法面板遮挡的尴尬,给使用者带来不小的困扰,用户体验 ...