javascript组成部分

一个完整的javascript实现应该由三个不同的部分组成:核心(ECMAScript)、文档对象模型(DOM)、浏览器对象模型(BOM) Web浏览器只是ECMAScript实现可能的宿主环境之一。宿主环境不仅提供基本的ECMAScript实现,同时也会提供该语言的扩展,以便言语和环境之间对接交互。

ECMAScript语言邮下列组成:语法、类型、语句、关键字、保留字、操作符、对象 文档对象模型(DOM):提供访问和操作网页内容的方法和接口 浏览器对象模型(BOM)提供与浏览器交互的方法与接口

javascript基本常识

1:javascirpt是严格区分大小写的。

2:javascript(标识符)命名规则:第一个字符必须是一个字母、下划线、美元符号,其它字符可以是字母、下划线、美元符号或数字

3:ECMAScript标识符采用驼峰大小写格式,也就是第一个字母小写,剩下的每个单词的首字母大写。(但是没有谁强制要求这个格式)

4:

//单行注释
/*
*这是多行注释
*/

5:每条语句最好用一个分号结尾,但是也可以省略分号。

6:

if (test)
alert(test); //有效但容易出错,最好不要使用

if (test)
{
alert(test);//推荐使用
}

7:var obj; 像这样未经过初始化的变量会保存一个特殊的值undefined

8:obj=100 这样虽然有效,但不推荐,这样相当于声明了一个全局变量

9:ECMAScript有5种简单数据类型:Undefined,Null,Boolean,Number和String

  1种复杂数据类型Object

10:typeof操作符 

var message = 'message';
typeof message
typeof(message)

11:Undefined类型只有一个值,即特殊的undefined

12:

var message;
alert(message)//undefined
alert(age);//报错啦

13:最好显示的初始化变量,这样的话当typeof操作符返回undefined值时,我们就知道被检测的变量没有被声明,而不是尚未初始化

  因为没有声明的变量用typeof操作符就会直接返回undefined

14要将一个值转换为其对应的Boolean值,可以调用转型函数Boolean()

15Number类型:八进制字面值的第一位必须是零,十六进制的字面值的前两位必须是Ox

  浮点娄可以这样:var floatNum = .1;但是不推荐这样使用

  如果浮点数小数点后面没有任何数字,那个这个数值就可以被作为整数值来保存,同样,如果浮点数本身就表示一个整数(如1.0)那么该值也会被转换为整数

14:Number.MAX_VALUE整数的最大值

  Number.MIN_VALUE整数的最小值

  如果计算得到一个超出javascript数值范围的值,那么这个数值自动转换为特殊的Infinity,如果某次返回正的或负的Infinity值,那么该值将无法继续参与下一次计算

  要想确定一个数值是不是有穷的,可以使用isFinite()函数

  访问Number.NEGATIVE_INFINITY和Number.POSITIVE_INFINITY可以得到正和负的Infinity的值,所以其实这两个属性分别保存着-Infinity和Infinity

15NaN特点:1任何涉及到NaN的操作都会返回NaN,2NaN与任何值都不相等,其中包括NaN本身
isNaN()这个函数接受一个参数,该参数可以是任何类型,而此函数会帮我们确定这个参数是否“不是数值”

16parseInt能够各种整数格式

Number(789)//不能转换789Yun
parseInt("789Yun");
parseInt("0xa313",
16);//有基数设置 也可以转换八进制
parseInt(""); //NaN

parseFloat只解析十进制值,因此它没有用第二个参数指定基数的用法

parseFloat解析字符串,如果此字符串包含一个可解析为整数的数(没有小数点或者小数点后面全部都是零) parseFloat()会返回整数

parseFloat("32.32")

17用双引号表示的字符串和用单引号表示的字符串完全相同,任何字符串长度都可以通过其length属性取得

  转换为字符串方法toString(),数值、布尔值、对象和字符串都有些方法,但null和undefined值没有此方法

  toString()如果是数值调用的话,还可以传递基数 eg:var a = 123; a.toString(16);

  在不知道值为null或undefined值时,可以使用转型函数String(),这个函数能够将任何类型的值转换为字符串,String()函数遵循转换规则:1如果值有toString()方法,则调用该方法(没有参数)返回相应的结果2如果值是null则返回"null"3如果值为undefined则返回"undefined"

18ECMAScript中的对象其实就是一组数据和功能的集合。在ECMAScript中,如果不能构造函数传递参数,则可以省略后面的那一对圆括号

如下所示

var obj = new Object();
var obj = new Object;

19Object的每个实例都具有下列属性和方法

  constructor保存着用于创建当前对象的函数

  hasOwnProperty(propertyName)用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在

  isPrototypeOf(object)用于检查传入的对象是否是另一个对象的原型

  propertyIsEnumerable(propertyName)用于检查给定的属性是否能够使用for-in语句

20with语句: 

with (location) {
var qs = search.substring(1);
var hostName =
hostname;
var url = href;
}

21switch

var num = 25;
switch (true) {
case num < 0: alert('less than 0');
break;
case num >= 0 && num <= 10: alert('between 0 and 10');
break;
case num > 10 && num <= 20: alert('between 10 and 20');
break;
default: alert('more than 20');
}

switch语句在比较值时使用的是全等操作符,因此不会发生类型转换

22函数中return语句之后的任何代码都永远不会执行

 return 语句也可以不带有任何返回值,这种情况 下,函数在停止执行后将返回undefined值 

23通过arguments对象的length属性可以获得有多少个参数传递给了函数,没有传递值的命名参数将自动被赋予undefined值(ECMAScript中的所有参数传递的都是值,不可能通过引用传递参数)

24ECMAScript函数没有重载

25与其它语言不同,ECMAScript没有为整数和浮点数值分别定义不同的数据类型,Numer类型可用于表示所有数值

26ECMAScript中无须指定函数的返回值,因为任何ECMAScript函数都可以在任何时候返回任何值

27ECMAScript函数中函数参数是以一个包含零或多个值的数组的形式传递的

28可以向ECMAScript函数传递任意数量的参数,并且可以通过arguments对象来访问这些参数

在html中使用javascript

script属性:

charset:表示通过src属性指定的代码的字符集

defer:表示脚本可以延迟到文档完全被解析和显示之后再执行

包含在script元素内部的javascript代码将从上到下依次解释

在javascript代码的任何地方不要出现“</script>”字符串,因为按照解析嵌入式代码的规则,当浏览器遇到字符串“</script>”时,就会认为那是结束的</script>标签,而通过把这个字符串分隔为两部分可解决这个问题

外部javascript文件带有js扩展名,但这个扩展名不是必需的,因为浏览器 不会检查包含javascript的文件的扩展名

带有src属性的<script>元素不应该在其<script>标签与</script>标签之间再包含额外的javascript代码

另外通过<script>元素的src属性还可以包含来自外部域的javascript文件

浏览器会按照<script>元素在页面中出现的先后顺序对它们依次进行解析

一般都把全部的javascript引用放在body元素中,放在页面的内容后面。

<script>标签定义了defer属性,表明脚本在挂靠时不会影响页面的构造,也就是说脚本会被延迟到整个页面都解析完毕后再运行,因为在<script>元素中设置defer属性( defer="defer" ),实际上与把script引用放到页面最底部的效果是一样的。(但是现在只有IE和Firefox3.1是目前唯一支持defer属性的主流浏览器)

XHTML(Extensible Hypertext Markup Language)

编写XHTML代码的要比编写html严格很多

CData片段是文档中的一个特殊区域,这个区域中可以包含不需要解析的任何格式的文本内容,因此在在html中可以出现的小于号 加上了CData片段后也可以在XHTML文档中正常运行了

如下所示:

<![CDATA[
function compare(a, b) {
if (a < b) {
alert('A is less than B');
} else {
if (a > b) {
alert('A is greater than B');
} else {
alert('A is equal to B');
}
}
}
]]>

在兼容XHTML的浏览器,这个方法可以解决问题,但是实际上,还有不少浏览器不兼容XHTML,因为不支持CData片段,再使用javascipt注释将CData标记注释掉就行了

如下所示:

//<![CDATA[
function compare(a, b) {
if (a < b) {
alert('A is less than B');
} else {
if (a > b) {
alert('A is greater than B');
} else {
alert('A is equal to B');
}
}
}
//]]>

让不支持<script>元素的浏览器能够隐藏嵌入的javascript代码, 这个方案就是把javascript代码包含在一个html注释中,

如下所示

<!--
function sayHi() {
alert('Hi');
}
//-->

其实作用外部文件比嵌入代码的优势主要体现在可维护性及可缓存(如果两个页面都作用同一个外部文件的话,那么这个文件只须下载一次)这两方面

文档模式:混杂模式与标准模式

<noscript>元素中的内容只有在浏览器不支持脚本或者浏览器支持脚本但脚本被禁用。浏览器支持脚本,也启用脚本的情况下,不会出现noscript元素中的任何内容

eg:

<noscript>
<p>本页面需要浏览器支持(启用)JavaScript</p>
</noscript>

js中常常容易忘记的基本概念的更多相关文章

  1. js中的面向对象--类似于类的概念

    创建对象的几种常用方式 1.使用Object或对象字面量创建对象 2.工厂模式创建对象 3.构造函数模式创建对象 4.原型模式创建对象 1.使用Object或对象字面量创建对象 使用object va ...

  2. 互联网我来了 -- 2. js中&quot;异步/堵塞&quot;等概念的简析

    一.什么是"异步非堵塞式"? 这个名字听起来非常恶心难懂,但假设以 买内裤 这件事情来比喻运行程序的话就非常easy理解"异步非堵塞式"的涵义了. 比如你是一个 ...

  3. js中几个容易混淆的概念

    1. var name = "The Window";var object = {name : "My Object",getName: function(){ ...

  4. js中的什么时候需要用new来实例化?

    有人说js中函数和类就是一个概念,请问:1 为什么我们在大多数情况下没有用new来实例化一个类(函数),如下 JavaScript code   1 2 3 4 5 6 7 <script> ...

  5. js中内置有对象

    statpot:使用mongo+bootstrap+highcharts做统计报表 最近做了一个统计项目,这个统计项目大致的需求是统计接口的访问速度.客户端会调用一个接口来记录接口的访问情况,我的需求 ...

  6. JS中的函数和BOM

    文档注释:开头两个*.写在函数上方,在调用函数时, 可以看到文档中的描述信息:function aaa(){ } [函数的声明及调用] 1.函数的声明格式: function 函数名(参数1,参数2, ...

  7. JS中的闭包 详细解析大全(面试避必考题)

    JS中闭包的介绍   闭包的概念 闭包就是能够读取其他函数内部变量的函数. 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变 ...

  8. 彻底搞清js中闭包(Closure)的概念

    js中闭包这个概念对于初学js的同学来说, 会比较陌生, 有些难以理解, 理解起来非常模糊. 今天就和大家一起来探讨一下这个玩意. 相信大家在看完后, 心中的迷惑会迎然而解. 闭包概念: 闭包就是有权 ...

  9. javascript (js)中的基本概念

    1. 基本数据类型 1.1 number (数字)在js中没有整形和浮点型的区分,所有的数字都是浮点型标识, 采用64位的浮点格式来表示数字.如果数字类型用在字符串连接表达式中,则会自动转换成字符串, ...

随机推荐

  1. JVM内存管理------杂谈(借此也论一论obj=null)

    各位园友好,LZ是从某网站转战过来的博主,看到这里很多博主都称看友们为园友,LZ斗胆模仿一下,不过以前,LZ其实都是称看友们为猿友的.之前LZ在某网站已经写了一系列文章,已经全部复制到了园内的新博客, ...

  2. flash

    1. 1.这种方式已经比较旧了, 2. html.push('<div class="flash-ad" style = "position:relative&qu ...

  3. 使用 Socket 通信实现 FTP 客户端程序(来自IBM)

    FTP 客户端如 FlashFXP,File Zilla 被广泛应用,原理上都是用底层的 Socket 来实现.FTP 客户端与服务器端进行数据交换必须建立两个套接字,一个作为命令通道,一个作为数据通 ...

  4. 常用数据库高可用和分区解决方案(2) — MongoDB篇

    MongoDB是当前比较流行的文档型数据库,其拥有易使用.易扩展.功能丰富.性能卓越等特性.MongoDB本身就拥有高可用及分区的解决方案,分别为副本集(Replica Set)和分片(shardin ...

  5. 在Word2013中多次应用格式刷

    顾名思义,格式刷是为了方便需要跨区域操作时候,能快速的应用格式到相应文本.那么怎么使用word进行格式刷的多次使用呢.我们先来看单次的,这个比较容易,只要在先需要的格式单击一次格式刷,再到需要的文本执 ...

  6. hibernate防止sql注入对参数赋值传参数的例子

    来源于:https://my.oschina.net/u/1754093/blog/707083 1.按参数名称绑定 在HQL语句中定义命名参数要用":"开头,形式如下: Quer ...

  7. 美发帮--android APP开发实战

    登陆界面,LinearLayout  ImageView  Button   用到了ImageView自动缩放,和自定义Button形状及State-Drawable,还用到了动画. 自定义控件之圆形 ...

  8. [转]fastjson

    原文地址:http://www.cnblogs.com/zhenmingliu/archive/2011/12/29/2305775.html FastJSON是一个很好的java开源json工具类库 ...

  9. 【BZOJ 3669】【NOI 2014】魔法森林 LCT+枚举边

    $LCT+枚举$ 复习一下$LCT$模板. 先以$Ai$为关键字$sort$,然后$Ai$从小到大枚举每条边,看能否构成环,构不成则加边,构成则判断,判断过了就切断$Bi$最大的边. 我的边是编号为$ ...

  10. 【USACO 1.5】Prime Palindromes

    /* TASK: pprime LANG: C++ SOLVE: 枚举数的长度,dfs出对称的数,判断是否在范围内,是否是素数 原来想着枚举每个范围里的数,但是显然超时,范围最大是10^9. 对称的数 ...