JavaScript基本概念
任何语言的核心都会描述这门语言最基本的工作原理,而描述内容通常要涉及这门语言的语法、操作符、数据类型、内置功能等用于构建复杂解决方案的基本概念。
语法
JavaScript借鉴了大量借鉴了C及类C语言,熟悉这些语法的的开发人员对JavaScript上手很快,在这里我也不一一说明了,随着以后用会慢慢熟悉,但有几点是需要强调的。
1.JavaScript区分大小写,变量名,方法名,操作符都区分。相信这点大部分开发人员已经熟悉了,很多主流语言都如此。
2.标识符,所谓标识符就是指变量,方法,属性的名字,或者方法的参数名,标识符可以是按照下列格式组合起来的一个或多个字符
a.第一个字符必须是字母、下划线(_)或者 $(这个$需要注意,和很多语言不同,是可以出现在首位的);
b.其他字符可以是上述字符或者数字
3.按惯例,JavaScript标识符用驼峰命名法,第一个字母小写,其他有意义单词首字母大写,当然不这么命名也不会出错
4.JavaScript的注释风格和C相同,分为单行注释和块级注释,单行注释两个正斜线开头,后跟注释,多行注释以 /* 开头,以*/结尾,中间加注释内容
5.JavaScript语句以分号(;)结尾,如果省略分号,则有解析器确定结尾(不推荐省略分号)
关键字和保留字
这个地球人都知道,这里就把关键字和保留字列出来,做个参考
|
|
在代码中使用关键字做标识符在大多数浏览器中会报"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