javascript产生的原因:
在拨号上网时代,表单数据必须发送到服务器端才能验证输入值得有效性,JavaScript的研发就是为了解决这个问题,以便在客户端就验证输入值的有效性。
ECMAScript/JavaScript:
JavaScript是Netscape公司于1995年发布的脚本语言,ECMAScript是欧洲计算机制造商协会定义的一种通用、跨平台、供应商中立的脚本语言的语法和语义。
一个完整的JavaScript实现包含:
核心(ECMAScript):由ECMA-262定义,提供核心语言功能;
文档对象模型(DOM):原本针对XML,但经过扩展针对HTML的API。
浏览器对象模型(BOM):提供与浏览器交互的方法和接口;
加快页面加载的两个合理方法:
将JS的<script>标签放在页面底部。
在<script>标签中加上async属性。
Number类型:
数值转换共有三个函数:Number(), parseInt(), 和 parseFloat()。
Number()转换规则:
布尔值转换为0和1.
数字只是简单传入和返回
null值返回0
undefined,返回NaN
如果是整数、浮点数、十六进制,都会转换成十进制后相应的数,忽略前导0。
空字符串转换为0,其他的为NaN
如果是一个对象,先调用valueof()方法,依据前面的规则转换,如果是NaN,再调用toString()方法,再按前面的规则转换。
parseInt()转换规则:
忽略字符串前面的空格,直到前面找到第一个非空格字符。如果不是数字字符或负号,则会返回NaN。直到解析到第一个非数字位置。最好为该函数提供第二个参数,转换时使用的基数。
parseFloat()转换规则:
只解析十进制,十六进制等会被返回0。且只解析一个小数点。
String类型:
toString()方法:
1.适用数值类型:数值、布尔值、对象和字符串。
2.对于数值类型可以传递一个参数,作为转换的基数。
string()方法:
1.可以转换任何类型,null和undefined返回本身。
操作符:
1.一元操作符
前置递增递减操作符会在语句被求值以前改变变量的值。
后置递增递减操作符是在语句被求值以后改变变量的值。
2.位操作符
~按位非(NOT)返回数值的补码。
&按位与(AND),将数值转换为2进制,每一位对齐,两个对应位都是1时返回1,否则返回0.
|按位或(OR),有一个位是1就返回1.
^按位异或(XOR),只有一个位为1是才返回1,否则返回0
<<左移,将数值的所有位向左移动指定的位数,左移不影响符号位
>>有符号右移,将数值向右移动,左边以符号位来填充所有的空位
>>>无符号右移,正数不影响,但是负数左边以0填充,会使其值非常大
3.布尔操作符
逻辑与和逻辑或是短路操作符,只要第一个操作符的求值结果为true,就不会对第二个进行求值。
4.条件操作符
variable = boolean_expression ? true_value : false_value;
语句:
1.do-while语句:一种后测试循环语句,最常用于循环体中的代码至少要被执行一次。
2.while:前测试循环语句。
3.for:前测试循环语句
4.for-in:精准的迭代语句,用来枚举对象的属性。
5.switch语句:
switch(expression){
case value:statement
break;
default:statement;
}
6.函数:函数的return 语句可以有返回值,也可以没有,没有返回值的意思是希望提前停止函数执行而且不需要返回值。
7.函数:js不介意传多少参数,也有不介意类型,函数体内可以通过arguments对象来访问这个参数数组,从而获取传递给函数的每一个参数。命名参数只是提供便利,但不是必须的。
8.js没有重载,两个名字相同的函数,该名字只属于后定义的函数。
基本类型和引用类型的值:
1.基本类型是指简单的数据段,也就是5种基本数据类型。这5种基本数据类型是按值访问的,可以操作保存在变量中的实际值。
2.引用类型指的是那些可能有多个值构成的对象。操作对象时,实际上是在操作其引用,引用类型的值是按照引用访问的。引用类型的值可以动态地添加属性。
复制变量值:
1.复制基本类型的值,会在变量对象上创建一个新值,然后把该值复制到为新变量分配的位置上,此后这两个变量可以参与任何操作而不会相互受影响。
2.对于引用类型的复制,会将储存在变量对象中的值复制一份放到为新变量分配的空间中。但这两个副本实际上是同一个指针,复制结束后,两个变量实际上将引用同一个对象,因此改变其中一个变量,就会影响另一个变量。
传递参数:
ECMAScript中的所有函数的参数都是按值传递的。基本类型值得传递如同基本类型变量的复制一样,而引用类型的传递,就如同引用变量的复制一样。(即使在对象内部修改参数值,但原始的引用还是不变)。
检测类型:
1.typyof 操作符确定一个变量是字符串、数值、布尔值、还是undefined的最佳工具。
2.instanceof 操作符可以判断一个对象是什么类的对象。
延长作用域链:
1.try-catch语句的catch块,会创建一个新的变量对象,其中包含的是被抛出的错误对象声明。
2.with语句,会将指定的对象添加到作用域链中。
function buildUrl(){
var qs = "?debug=true";
with(location){ //location对象中包含所有的属性和方法
var url = href + qs; //实际引用的是location.href
}
return url; //url是函数执行环境的一部分
}
没有块级作用域:
1.在js中,if语句中的变量声明会将变量添加到当前执行环境中。
if(true){
var color = "blue";
} alert(color); //"blue",一般在C/C++/Java中,color会在if语句执行完毕之后被销毁。
在编写JS代码时,如果不声明而直接初始化变量,会使其变成全局变量。