JavaScript基本概念

任何语言的核心都会描述这门语言最基本的工作原理,而描述内容通常要涉及这门语言的语法、操作符、数据类型、内置功能等用于构建复杂解决方案的基本概念。

语法

JavaScript借鉴了大量借鉴了C及类C语言,熟悉这些语法的的开发人员对JavaScript上手很快,在这里我也不一一说明了,随着以后用会慢慢熟悉,但有几点是需要强调的。

  1.JavaScript区分大小写,变量名,方法名,操作符都区分。相信这点大部分开发人员已经熟悉了,很多主流语言都如此。

  2.标识符,所谓标识符就是指变量,方法,属性的名字,或者方法的参数名,标识符可以是按照下列格式组合起来的一个或多个字符

a.第一个字符必须是字母、下划线(_)或者 $(这个$需要注意,和很多语言不同,是可以出现在首位的);

b.其他字符可以是上述字符或者数字

  3.按惯例,JavaScript标识符用驼峰命名法,第一个字母小写,其他有意义单词首字母大写,当然不这么命名也不会出错

  4.JavaScript的注释风格和C相同,分为单行注释和块级注释,单行注释两个正斜线开头,后跟注释,多行注释以 /* 开头,以*/结尾,中间加注释内容

  5.JavaScript语句以分号(;)结尾,如果省略分号,则有解析器确定结尾(不推荐省略分号)

关键字和保留字

这个地球人都知道,这里就把关键字和保留字列出来,做个参考

 

  
关键字
break else new var
case finally return void
catch for switch while
default if throw  
delete in try  
do instanceof typeof  
 
 
保留字
abstract enum int short
boolean export interface static
byte extends long super
char final native synchronized
class float package throws
const goto private transient
debugger implements protected volatile
double import public  

  在代码中使用关键字做标识符在大多数浏览器中会报"Identifier Expected"(缺少标识符),所以见到这个错,如果看不错代码有什么错误,可以查查是不是用了关键字做标识符。

变量

  1.JavaScript的变量还是很有意思的,习惯了用C或者Java神马的,突然学JavaScript会很不适应,JavaScript的变量是松散类型的,也就是弱类型,可以保存任何类型的数据,每个变量只是一个用于保存值的占位符。 变量定义的时候前面就不写类型了用 var操作符 后跟变量名

    var a; //只是定义一个变量,可以存放任何值,未初始化存的是 undefined

    var b=3; //定义后,直接初始化

    var c="hello";  // (单引号,双引号一样,配对就行)

  2.使用var操作符定义的变量是该变量作用域内的局部变量,在该作用域内有效,如果在方法中用var定义变量,方法结束后,变量销毁

    function test(){

      var message="Hello there!"

    }

    test(); //方法调用的时候创建变量并赋值,执行结束后销毁

    alert(message); //undefined

  3.如果定义变量的时候不写ar操作符,这时候变量就会定义为全局变量,初始化后,在任意位置都可以使用,但很不推荐定义全局变量,不容易维护,要是几个人同时开发,大家都定义全局变量,到时候命名冲突了,就乱套了

  

    function test(){

      message="Hello there!"

    }

    test(); //方法调用的时候创建变量并赋值,执行结束后销毁

    alert(message); //Hello there!

数据类型

  松散类型也是有类型的,JavaScript有5种简单数据类型,或者说基本数据类型, Udefined、Null、Boolean、Number、String,还有一种复杂的数据类型Object,object本质上石油无序的键值对组成的。JavaScript不支持自定义类型,所以JavaScript中所有值都是上面六种类型之一。

  1.typeof (o是小写,真坑爹,经常搞错。。。)

  要是想知道一个变量是那种类型的,就得靠typeof操作符了,有一点值得注意的,typeof是操作符,不是方法(所以人家的o是小写,不按方法规范命名),这也就是说,检测一个变量类型的时候,用typeof XXX 就可以了,不用加把变量括起来,尽管很多人都括起来,虽然没错,但是没必要,不过好像增加了可读性,纠结。。。,还有一点,用typeof检测一个function 返回的不是object,而是function,尽管function也是object但是比较特殊就特殊对待了,typeof null 也会返回object,而不是null,这个一会儿会说明.

    var message="I'm a string";

    alert(typeof mesage);  //string

    alert(typeof(message));  //string

    alert(typeof 34); //number

Undefined

  Undefined 类型只有一个值 undefined(注意大小写,用的时候也不用加引号,人家不是string),刚才提到了,用var定义变量,但不初始化时,变量得的默认值就是undefined,一般情况下不需要显式的把一个变量定义成undefined,undefined主要用于比较,区分空对象指针与未初始化的变量。

    var message;

    alert(message==undefined);  //true

  不过包含undefined值的变量和为定义的变量还是不一样的

    var message;

    alert(message);  //"undefined" 有引号是因为alert调用了toString方法,而不是undefined本身有引号

    alert(XXX);  //产生错误,可见未定义和未初始化是不一样的

  坑爹的时候到了,对未初始化的变量 typeof操作符返回undefined,这个好理解,然而对未声明的变量执行typeof操作符还会返回undefined,所以不能用typeof检测一个变量的定义与否,同样用typeof操作符检测变量,返回undefined也不能说明变量未定义。所以我们自己定义变量的时候尽量都显式初始化变量(定义完之后赋值),这样用typeof返回undefined就知道应该是为定义的变量了,除非变量被显式的初始化成了undefined,没人这样吧。。。。

Null

  这个变量大名鼎鼎,是个语言都有,但JavaScript中的Null有自己的特殊性,首先和Undefined一样,也是只有一个值 null,再说一遍变量类型首字母大写,但值的首字母是小写的,null表示一个空对象指针,这也正是使用typeof null时返回object的原因。

    var message=null;

    alert(typeof message);  //"object"

  如果定义的变量准备用来存object,最好初始化为null,这样以后用的时候,判断一下变量值是否为null就知道变量内是否保存对象引用了

 

  null也有坑爹的地方,实际上undefined是派生自null的,JavaScript中它们两个做相等判断的时候是返回true的,尽管如此不要混淆undefined和null

  alert(undefined==null);  //true

  上面绿色字体的是错误理解,一楼undefined 给指正了出来,而且讲的很透彻,为了防止看的人没看评论无解,我在这里抄一下:

高贵的undefined和null是完全不一样的。
==在javascript里面不是完全相等, 而是“转换类型后相等”

比如0=='0'
就是返回true的。
这并不能说明0和'0'具备任何关系。

实际上是有===来做比较的。
null===undefined
将返回false。

实际上除了一些特殊情况(一般也不是什么好情况)基本上不会使用==, 而基本都会使用===来做比较。 因为这个才是我们通常意义上说的相等。

Boolean

  Boolean类型有两个值,true和false,JavaScript中和数字0、1没关系,那是Number类型,但是有一定的转换规则,要将一个值转换为对应的Boolean值可以使用Boolean()

    var message="Hello";

    var messageBool=Boolean(message);

  看看转换规则,还是挺有用的,一个判断作物,可能整个逻辑都不对了就

    1.对非空字符串,转换为true,""(空字符串)转换为false

    2.任何非零数字包括无穷大转为true,负数也是哦,0和NaN转换为false

    3.任何对象都转为true,null转为false,undefined转为false

Number

整数

   Number类型我们经常用,里面的东西也不少,最基本的数值自变量格式是十进制整数,十进制数可以直接输入

    var a=45; //整数

  除了十进制整数还可以通过八进制或十六进制字面量来表示,不过为了加以区分,八进制的字面量值第一位必须是0,然后是八进制数字(o~7),数值超过范围,如写了个09,前面的0就会被忽略,按十进制处理,就真成9了,十六进制前两位为0x,后跟十六进制数字(0~9,A~F),字母不区分大小写。表示是表示的,在进行运算的时候都会转为十进制运算。

浮点数值

  浮点数就是带小数点,并且小数点后面有数字的数,由于保存浮点数需要内存空间是证书的两倍,,因此JavaScript会不失时机的吧浮点数转换为整数,如果小数点后面没有数字,或者数字本身就是整数(3.0),JavaScript会自动转换为整数

    var num1=3. ;  //小数点后面没有数字,解析为3

    var num2=4.0 ;  //整数,解析为4

  对于极大或极小的数字用科学计数法表示,数字+E(e)+整数,如 2.3E6 表示2.3乘以10的6次幂,注意,是10,不是自然常数,坑爹。反正我基本没有JavaScript处理过这么大的数字问题。

  还有一点需要注意,浮点数的最高精度是17位小数,在进行数值计算的时候精度没有那么高,你会惊喜的发现 0.1+0.2不等于0.3,而是0.30000000000000004

数值范围

  内存限制,浮点数是有范围的,JavaScript的最小数值存放在Number.MIN_VALUE中,最大数存放在Number.MAX_VALUE,平时是够用了,但一旦超过范围,这个数值会自动转成Infinity值,附属就转为-Infinity,这两个无穷大树不能参与运算的,可以用方法 isFinite()检测数值是不是在最大与最小之间

  alert(isFinite(4564756)); //true

  alert(isFinite(Number.MIN_VALUE+Number.MAX_VALUE));  //false ,这两个不能参与运算

NaN

  NaN是非数值,挺奇怪的名字,英语好理解,Not a Number,这个数值用来表示本来想返回数值却出错了的情况,比如任何数除以0就返回NaN,不报错。Nan有两个特性,首先任何涉及NaN的操作都返回NaN,其次NaN和任何值都不相等,他还能和自己不相等吗,还真能。

  alert(NaN ==NaN);  //false

  这可肿么知道什么时候数值计算出了错,JavaScript提供了一个isNaN()d的方法,这个方法接受一个参数,如果参数是数字类型就直接判断,如果不是就尝试装换,再判断

    alert(isNaN(NaN));  //true

    alert(isNaN(20));  //false

    alert(isNaN("10"));  //false,可以转换为数字 10

    alert(isNaN("OK"));  //true OK转不成数字了

    alert(isNaN(true));  //false, 转成数字1

  有些奇怪的是参数也能是对象,这时先调用对象的valueOf()方法,可以转为数字就判断,否则就调用toString()方法,再测试返回值

 

数值转换

  有三个方法可以吧数值转换为非数值 Number(), parseInt(),parseFloat()。 Number()可以转换任何数据类型,但规则很奇怪,很多时候得出的并非我们想要的结果,有兴趣朋友可以上网查查其规则,后两个都是转字符串为数值,比较实用。

  parseInt()在转换的时候关注的是字符串是否符合数值模式,会忽略空格,如果第一个非空字符不是数字或负号,就会返回NaN,否则继续解析,知道遇到非数字字符,然后截断,也就是“1234ABD” 会被解析为1234, "23.45sdf"会被解析成23,值得注意的是字符串以0开头就会被解析成八进制,0x开头解析成十六进制,这样解析 "070"之类的让人很迷惑,遇事parseInt提供了第二个参数,可以传入进制数,默认是十

    var num=parseInt("0xAF",16); //175 返回十进制,涉及到计算了嘛

    var num2=parseInt("AF"); // NaN

  由于不指定技术意味着让parseInt()决定如何解析输入的字符串,为了避免错误解析,最好第二个参数都写上

    var num1=parseInt("010");   //8  按八进制解析

    var num2=parseInt("010",8)  //8  按八进制解析

    var num3=parseInt("010",10)  //10  按十进制解析

    var num3=parseInt("010",2)  //2  按二进制解析

  parseFloat()和parseInt()相似,就是认识小数点和e,不再赘述

String

  string大家都认识,单双引号都一样,匹配就行,还有一些转义字符和C一样,转义字符在计算字符串的长度的时候按一个计算,index也是,长度yonglength属性取得,不是方法,没括号。

  JavaScript中字符串是不可变的,所以穿件字符串初始化之后改变值,其实是把原来的字符串销毁,然后用一个新的字符串充当该变量,数值、布尔值、对象、字符串都有 toString()方法,null和undefined没有,字符串的方法很多,处理也很常见,用法很灵活,我这里不一一列举了,给个链接吧

http://www.dreamdu.com/javascript/object_string/   这个我觉得还不错

Object

  这个一句两句说不清楚,只能简单提提,随着以后使用越来越多,会慢慢熟悉。JavaScript的对象可以看做一组数据和方法的集合,创建对象很简单

    var o=new Object();

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

1.constructor 保存着用于粗昂见当前对象的方法,解释构造函数

2.hasOwnProperty 用于建厂给定属性是否在当前对象中,而不是实例原型中,传入参数为属性名

3.isPrototypeOf 用于检查传入的对象是否为另一对象的原型

4.propertyIsEnumrable 用于检查给定的属性是否够使用for in语句

5.toString 这个就不多说了

6.valueOf 这个不多少了,顾名思义即可

  其实String和Object的东西最多我感觉,反而说的最少,后续慢慢介绍吧,这些东西要是没学过JavaScript,真的让人是云里雾里,不过接着下面的学习就清楚了,这里有个概念就可以。

 这次说的差不多了,下次我会总结一下操作符语句和方法或者说函数,希望大家多多指教

转自:http://www.cnblogs.com/dolphinX/archive/2012/03/18/2390040.html

posted @ 2012-05-29 10:50  牛伯温  阅读(447)  评论(0编辑  收藏  举报