javascript 基础 1

来源:互联网 发布:淘宝大连博哲贸易 编辑:程序博客网 时间:2024/06/06 01:10

1.JavaScript语言包含三个不同的部分组成:1.ECMAScript,提供核心的语言功能,比如语法,类型,关键字,对象等;2.文档对象模型(DOM),提供访问和操作网页内容的方法和接口;3.浏览器对象模型(BOM),提供与浏览器交互的方法和接口。

2.将JavaScript插入HTML中要使用<script>标签,可以直接将JavaScript嵌入到HTML页面中,使脚本与标记混在一起,也可以使用外部JavaScript文件此时必须使用<script>标签的src属性,指向外部文件地址,可以与包含它的页面在同一个服务器,也可以是其他域中的文件。所有的<script>文件都会按照它们出现的顺序被解析,由于浏览器会先解析<script>元素中的代码,再解析后面的内容,因此一般把<script>元素放在页面最后,即</body>标签前面。

<script>还有两个属性,一个是defer,这个属性会让脚本在文档完全呈现完在执行,延迟脚本总是按顺序执行;另一个属性是async,这个属性是可以立即下载脚本,但不妨碍页面中其他操作,让当前脚本不必等待其他脚本,也不必阻塞文档的呈现,但不能保证异步脚本按它们的顺序执行。

3.可是使用<noscript>元素来来指定不支持脚本的浏览器中显示的内容,比如下

<body>  <noscript>    <p>本页面需要浏览器支持JavaScript</p> 
  </noscript></body>
这个页面只会在脚本无效的时候向用户显示这个段落,如果浏览器支持并启用了脚本,则用户永远也看不到它。

4.ECMAScript中引入了严格模式,要在整个脚本中启用严格模式,可以在顶部添加 "use strict"代码,当然也可以指定函数在严格模式下执行,

function(){  "use strict"  //函数体}
5.ECMAScript中共有5种基本的数据类型:Undefined,Null,Boolean,Number和String,还有一种复杂数据类型Object,对象是由一组无序的名值对组成。

因为ECMAScript是松散型的,即可以保存任何类型的数据,简言之,每个变量只是一个用于保存值的占位符而已。所以需要一种手段来检测变量的数据类型,这是就会用到typeof 操作符,typeof操作符可以返回下列字符:1.“undefined” ,表示值未定义。2.“boolean”,表示值是布尔型的。3.“string” ,表示值是字符串。4.“number”,表示值是数字类型。5.“function“,表示值是函数。6.“object”,表示值是对象或者是null。因为typeof是一个操作符而不是一个函数,所以使用的时候不必需用括号。比如 :
var message = “something”;alert(typeof message);alert(typeof (message));
需要注意的是,调用 typeof null 会返回 “object” ,因为null被认为是一个空的对象的引用。


(1)Undefined类型只有一个值:undefined,在使用var声明变量的时候未初始化,这个变量的值就是undefined。

(2)Null类型也是只有一个值:null,从逻辑角度来看,null是一个空对象指针,所以用typeof检测会返回“object”。而实际上,undefined值是派生自null值的,ECMA-262规定它们的相等测试性返回的true:alert(undefined == null );//true

(3)boolean类型包含两个字面量:true和false。这两个值与数字值不是一回事,因此true不一定等于1,false不一定等于0 。需要注意的是ECMAScript中的一切都是区分大小写的,所以True和False 都不是boolean值。虽然boolean只有两个值,但是ECMAScript中所有类型的值都有与这两个值等价的值。要将一个值转换为boolean类型的,可以调用转型函数Boolean()。比如:

var message ="something";var messageAsBoolean = Boolean(message);

任何类型的值都可以被转换为Boolean类型的值,至于返回ture还是false,则取决于转换值的数据类型和值。转换规则如下:数据类型转换为true的值转换为false的值BooleantruefalseString任何非空字符“ ”(空字符串)Number任何非零整数0和NaNObject任何对象nullUndefinedundefined

(4)Number类型:基本的是十进制数字,还可以是八进制或十六进制的数字,八进制的第一位一定是0,然后时0~7,如果字面中的数值超出了范围,那么前导0回被忽略,后面的数值被当成十进制,而且值得注意的是八进制在严格模式下是无效的。十六进制的前两位必须是 0x ,后面可以是0~9及A~F,其中字母不区分大小写。在计算的时候,八进制和十六进制都会被转换为十进制。  浮点数:数值中包含小数点,切小数点后至少一位数字。由于保存浮点数的空间是保存整数的两倍,因此ECMAScript会不失时机的将浮点数保存为整数,同样的,如果浮点数本身就是一个整数(1.0),那么该值也会转换为整数。对于极大或者极小的数值,可以用e表示法表示的浮点数值表示。特别注意的是,浮点数在进行计算的时候精度远远不如整数,例如0.1+0.2的结果不是0.3,而是0.300000000000000004,所以永远不要测试某个特定的浮点数。

NaN(Not a Number)非数值,这个数值用来表示本来应该返回数值的操作数为返回数值的情况(这样不会抛错误)。例如任何数字除0即返回NaN,因此不会影响其他代码的执行。NaN有两个特点:任何涉及NaN的操作都会返回NaN(例如NaN/10),其次NaN与任何值都不相等,包括NaN本身。针对这两个特点,ECMAScript定义了一个isNaN函数,这个函数可以确定参数是否“不是数值”,例如:

alert(isNaN(NaN));//truealert(isNaN(10));//falsealert(isNaN(“blue”);//true 无法转换为数字alert(isNaN(true);//false 可以被转换为数值1alert(isNaN”10“);//false 可以被转换为数值10
数值转换,共有三个函数可以将非数值转换为数值:Number(),parseInt(),parseFloat()。

第一个适用于任何数据类型。而另两个则是专门将字符串转换为数值。其中Number()函数,如果是Boolean,则可以被转换为0和1;null会被转换为0;undefeated则返回NaN。空字符串会被转换为0。如果字符串只包含数字,比如“1”,“0xf”,“1.1”这种都可以将其转换为相应的数字。字符串中前导的0会被忽略。如果是对象,则调用对象的valueOf()函数,然后依照前面的规则转换。如果转换的结果是NaN,则先调用toString()函数,再依次按前面的规则进行转换。

由于Number()函数转换时较为复杂且不够合理,所以处理整数的时候更多的用parseInt()函数。此时更多看是否符合数值模式。它会忽略字符串前面的空格,直至找到第一个非空格字符,如果第一个字符不是数字符号或者正负号,则返回NaN。对空字符串返回的使NaN,而Number()函数返回的使0。如果第一个字符是数字,parseInt()函数可以识别各种整数模式(八,十,十六进制)。parseInt()函数可以接受两个参数,第二个参数指定转换的基数(即多少进制)。例如指定后,十六进制前可以不带“0x”。

var num = parseInt("AF",16); //175var num = parseInt("AF");//NaN
parseFloat()函数与parseInt()类似,也是从第一个字符开始解析,一直解析到末尾或者遇到一个无效的浮点数为止。即字符中的第一个小数点是有效的,第二个则无效。“22.33.3”会被转换为“22.33” 。parseFloat()只解析十进制,因此含“0x”的十六进制会被解析为0 。若没有小数点或者小数点后全是0,则返回整数。

(5)String字符串,任何字符串的长度都可以通过length属性取得。ECMAScript定义的字符串是不可变的,即字符串一旦被创建,它们的值就不能改变。要改变某个变量保存的字符串,首先要销毁原来的字符串,然后另一个包含新值的字符串来替代。

要将一个值转换为字符串可以有两种方式,第一种是使用几乎每个值都有的toString()方法。在不知道被转换值是不是null或者undefeated的情况下,还可以使用String()方法,这个方法能将任何类型的数值转换为字符串。String()方法遵循以下:如果只有toString(),则调用函数;若值是null,则返回“null”;若是undefeated,则返回“undefeated”。

(6)Object,对象。每个实例都有以下的属性:1.constructor(构造函数),保存创建当前对象的函数。2.hasOwmProperty,用于检查给定的属性在当前的对象实例中是否存在。最为参数的属性名必须以字符串指定。3.propertyIsEumerable:用于检查给定的属性是否能用for-in语句枚举,参数也必须是字符串。5.toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区有关。6.toString():返回对象的字符串表示。7.valueOf():返回对象的字符串,数字或者布尔值表示,通常与toString()返回值相同。

6.函数。函数中的参数,ECMAScript不介意传入函数的参数有多少个,也不再乎参数的类型,也就是说,即使你定义的函数只接收两个参数,但是调用函数的时候不一定传入两个参数,可以传入一个或者三个甚至不传递。之所以这样,是因为ECMAScript中的函数在内部是用一个数组来表示。函数接收的是这个数组,而不在乎数组中包含哪些参数。在函数中,可以通过argument对象来访问这个数组,从而传递数组中的参数。

argument对象只是与数组类似。argument[0]表示第一个参数,argument[1]表示第二个参数,以此类推。可以通过length属性确定参数的个数。当然argument对象可与命名参数一起使用,比如:

function doAdd(num1,num2){  if(arguments.length == 1){    alert(arguments[0]+10);
  }else if(arguments.length==2){
    alert(arguments[0]+argument[1];
  }
}

doAdd(10); //20
doAdd(10,30);  //40

还有一点是argument的值永远与对应命名参数的值保持同步。例如下面,每次执行函数的时候都会重写第二个参数,将num2变为10.不过两者只是值同步,并不是读取这两个值访问相同的内存空间。另外,如果只是传入了一个参数,那么argument[1]的值将不会反应到同名参数重。因为argument的长度由传入的参数个数决定,而不是由定义的时候命名参数个数决定。此时num2的值是undefined,所以结果是NaN。也是由于这个原因,所以JavaScript没有重载。如果两个函数名字相同,则改名字属于后面定义的那个函数。

function doAdd(num1,num2){ 
  arguments[1]=10;  alert(arguments[0]+num2)}

原创粉丝点击