一、基本解释
JavaScript是一种脚本语言。
脚本,一条条的文字命令。执行时由系统的一个解释器,将其一条条的翻译成机器可识别的指令,然后执行。常见的脚本:批处理脚本、T-SQL脚本、VBScript等。(.net生成的exe文件用记事本打开看不懂。)
HTML只是描述网页长相的标记语言,没有计算、判断能力,如果所有计算、判断(比如判断文本框是否为空、判断两次密码是否输入一致)都放到服务器端执行的话网页的话页面会非常慢、用起来也很难用,对服务器的压力也很大,因此要求能在浏览器中执行一些简单的运算、判断。JavaScript就是一种在浏览器端执行的脚本语言。
二、语法概述
大小写敏感,JavaScript严格区分大小写。(n与N是两个不同的变量。)
弱类型语言(声明变量都用var),不存在int n=10;string s=“a”;的情况,所有变量都用var。因为是“动态类型”,所以下面这段代码是合法的:var n=10;n=“a”;
//Javascript如果遇到错误,有错误的<script></script>中的代码不会执行,但是不会影响后面的而其他<script></script>代码和html的显示。
三、js的事件
JavaScript中也有“事件”的概念。
单击一个按钮显示当前时间。就触发了一个事件
<input type=“button” onclick=“ js代码" />
一个特殊的地方:单击一个超链接显示当前时间。
<a href=“javascript:js代码”>热点文字</a>
//<a href="javascript:alert('js弹出对话框');">执行</a>
只有超链接的href中的JavaScript中才需要加“javascript:”,因为它不是事件,而是把”javascript:”看成像“http:”、“ftp:”、“thunder://”、“ed2k://”、“mailto:”一样的网络协议,交由js解析引擎处理。只有href中这是这是一个特例。
文本框失去焦点后弹出消息对话框。onblur事件【演示】
超链接为“死链”时,使用#与javascript:void(0);的区别。Void0没有用的值,不会去任何地方,就没有意义
四、字符串
字符串使用单引号’abc’。(双引号也行。推荐;html→双引号,js→单引号)
注释://或者/**/
五、数据类型
共六种:
Boolean(布尔)、Number(数字)、String(字符串)、Undefined(未定义)、Null(空对象)、Object(对象类型),undefined与其他值计算得到的结果不是我们想要的,但与数据库中的null稍有区别,比如与数字计算或与字符串计算结果。
出了Object是引用类型以外,其他都是基本数据类型
Undefined类型、Null类型都是只有一个值的数据类型,分别为undefined与null.
基本类型与引用类型的区别
String也是基本类型,不能为String添加动态属性,而引用类型时可以的。
引用类型对象 instanceof 类型,判断某个值是否为某个类型,所有引用类型instanceof Object返回都是true
六、undefined和null的区别
JavaScript中的null与undefined(参考资料)
undefined,表示一个未知状态
声明了但是没有初始化的该变量,变量的值是一个未知状态(undefined)。 (访问不存在的属性或对象window.xxx)
方法没有明确返回值时,返回值是一个undefined.
当对未声明的变量应用typeof运算符时,显示为undefined(*)
null表示尚未存在的对象,null是一个有特殊意义的值。可以为变量赋值为null,此时变量的值为“已知状态”(不是undefined),即null。(用来初始化变量,清除变量内容,释放内存)
undefined==null //结果为true,但含义不同。
undefined===null //false(*),先判断类型是否一致,然后判断值。
===严格等于、!==严格不等于
由于==会将值转换类型后再判断是否相等,有时可能会有意想不到的结果,所以推荐使用===。但注意,有些情况使用==能带来更好的效果。
六、转义符
JavaScript中字符串同样需要转义符 ’ ’,与C#一样。
想在页面输出:c:windowsmicrosoftvs.txt,这句话,需要这样写:alert(‘c:\windows\microsoft\vs.txt’);不能用@,@只在C#中有效。
常见转义符:
、
、’、”、\
在用正则表达式的时候也会遇到转义符问题。(*)
if-else、for、while、do-while、switch、continue、break的用法参考c#语法。for循环稍有差异:for(var i=0;i<10;i++){ … }
注:switch判断时,是“全等于”,===
七、类型转换
parseInt(arg)//将指定的字符串,转换成整数
parseFloat(arg)//将指定的字符串,转换成浮点数
Number(arg)把给定的值(任意类型)转换成数字(可以是整数或浮点数);转换的是整个值,而不是部分值。如果该字符串不能完全转换为整型,则返回NaN。(Not a Number)
isNaN(arg)//判断arg是否为一个非数字(NaN),NaN与NaN也不相等。
String(arg)把给定的值(任意类型)转换成字符串;
Boolean(arg)把给定的值(任意类型)转换成 Boolean 型;
(*)eval(codeString)//将一段字符串的js代码,计算并执行。类似于动态SQL语句。var n1 = 'var n=10;var n2=n+10;alert(n2);';eval(n1);
alert(eval(‘2+3’));
eval(‘alert(100);’);
八、函数声明
JavaScript中声明函数的方式:(无需声明返回值类型)
function add(i1, i2) {
return i1 + i2; //如果不写return返回的是undefined
}
int add(int i1,int i2)//C#写法
不需要声明返回值类型、参数类型。函数定义以function开头。
var r = add(1, 2);
alert(r);
r = add("你好", "tom");
alert(r);
JavaScript中不像C#中那样要求所有路径都有返回值,没有返回值就是undefined。
易错:自定义函数名不要和js内置、dom内置方法重名,比如selectAll、focus等函数名不要用。//不要与系统函数重名。(在单击事件中调用自己定义的focus方法,有问题。与系统的focus()方法重名了)
九、JavaScript中没有方法重载。
动态为方法传递参数,类似于.net中的params关键字作用
<script type="text/javascript">
function myFunc() {
for (var i = 0; i < arguments.length; i++) {
document.write(arguments[i]);
document.write('<br/>');
}
}
myFunc('张三', 18, '李四', 19);
</script>
十一、Array
JavaScript中的Array对象就是数组,首先是一个动态数组,而且是一个像C#中数组、ArrayList、Hashtable等的超强综合体。
数组的使用方式:
var names = new Array();//无需初始化长度,动态
names[0] = "tom";
names[1] = "jerry";
names[2] = "lily";
循环遍历数组(for循环):
for (var i = 0; i < names.length; i++) {
alert(names[i]);
}
JS中的Array是一个宝贝,不仅是一个数组,还是一个Dictionary,还是一个Stack
var pinyins = new Array();
pinyins["人"] = "ren";
pinyins["口"] = "kou";
pinyins["手"] = "shou";
alert(pinyins["人"]);
alert(pinyins.人);
字典风格的简化创建方式:
var arr = {“人”:”ren”,“口”:”kou”};//json格式。
像Hashtable、Dictionary那样用,而且像它们一样效率高。
不能直接用for循环遍历,需要用forin循环。
Dictionary风格数组的length为0。所以不能用for遍历
十二、argument对象
在函数代码中,使用特殊对象 arguments,开发者无需明确指出参数名,就能访问它们。
例如,在函数 sayHi() 中,第一个参数是 message。用 arguments[0] 也可以访问这个值,即第一个参数的值(第一个参数位于位置 0,第二个参数位于位置 1,依此类推)。
因此,无需明确命名参数,就可以重写函数: