一、严格模式
1、 ECMAScript5中引入了严格模式(strict mode)的概念。本意是为javascript定义了一种不同的解析与执行模式。
2、 严格模式下的不同:
(1)、一些不确定行为将得到处理。
(2)、对某些不安全操作也会抛出异常。
要在脚本中启用严格模式,就在顶端添加代码:
use strict
3、严格模式下,javascript的执行结果会有很大不同。
4、支持严格模式的浏览器如下:
IE10+
Firefox 4+
Safari 5.1+
Opera 12+
Chrome
二、变量
1、 ECMAScript的变量都是松散类型,也就是可以用来保存任何类型的数据,每个变量仅仅是一个用来保存值的占位符而已。
2、未经过初始化的变量,将自动保存undefined。
var sum
console.log(sum);
/*
输出:
>>undefined
*/
3、变量的作用域:
(1)、使用var操作符定义的变量将成为定义该变量的作用域中的局部变量。如果在函数中使用var定义一个变量,那么这个变量在函数退出后就会销毁。
(2)、 变量message是在函数中使用var定义的,当函数被调用时,就会创建该变量并为其赋值。而后,这本变量又会被立刻销毁
function test(){
var message="h1";//局部变量
}
test();
console.log(message);//报错
(3)、当忽略了var操作符时(隐式变量命名法),导致message变成全局变量。这样只要调用test()一次,这个变量就有了定义,可以在函数外部任何地方访问。
(4)、虽然忽略var操作符可以使变量成为全局变量,但是这种方法不推荐使用。因为局部作用域中定义全局变量很难维护,有意的忽略var操作符,也会由于相应变量不会马上就有定义而导致不必要的混乱。在严格模式下,给未声明的变量赋值会抛出ReferenceError错误。*在ECMAscript第5版本中的starct mode中,隐式全局变量已经被判定为一种错误。
function test(){
message="h1";
}
test();
console.log(message);
/*
输出:
>>hi
*/
三、数据类型
1、在ECMAScript中有5种简单数据类型(基本数据类型)
Undefined//变量未赋值时产生
Null//空
Boolean//布尔型
Number//数据型
String//字符型
2、1种复杂数据类型
Object
//本质上是由一组无序名值对组成的
3、typefo操作符
(1)、 一种用来检测变量数据类型的操作符
/*对一个值使用typeof操作符可能返回以下某个字符串
"undefined"//如果这个值未定义
"boolean"//如果这个值是布尔值
"string"//如果这个值是字符串
"number"//如果这个值是数值
"object"//如果这个值是对象或者null
"function"//如果这个值是函数
- */
var int1;
var int2=true;
var int3="sun";
var int4=1;
var int5=new Object();
int5.name="zhou";
int5.age=5;
var int6=function(){
document.write(你好);
};
console.log(typeof(int1));
console.log(typeof(int2));
console.log(typeof(int3));
console.log(typeof(int4));
console.log(typeof(int5));
console.log(typeof(int6));
/*输出为:
"undefined"
"boolean"
"string"
"number"
"object"
"function"
*/
(2)、typeof使用例子
var message="some string"
alert(typeof message);
alert(typeof (message));
alert(typeof 95);
typeof操作符的操作数可以是变量,可以是数值字面量。
typeof是一个操作符而不是函数,尽量用圆括号使用。
四、解释型语言
1、概念:解释型语言是在运行环境中进行编译的语言。反之编译型语言,则是需要通过IDE编译,才可以在环境中运行的语言。
2、特点:
(1)解释型语言:
a:对于开发者来说,开发更为容易。相对于编译型语言。
b:运行速度,都会慢于编译型语言,当然这是理论上的描述。当google开发出v8内核的浏览器时,这一界限已然模糊。
(2)编译型语言:
a:对于开发者来说,学习成本高的。例如c++,就被号称是十年磨一剑的语言。
b:运行数度快。就向前面说的,这一界限已经比较模糊了
3、总结:
选择程序设计语言时,比起考虑编译型语言还是解释型语言,更重要的目的是考虑语言的设计目的,项目的正真需求是什么,究竟是为了使开发过程变得轻松快速开发,还是为了提高执行效率。设计javascript之处,优先考虑的是使开发过程变得轻松。
五、动态语言
1、javascript是一种动态语言,单从代码的角度来看,动态语言的变量和函数是不指定返回值类型的。
六、基于原型的面向对象
1、基于原型的面向对象语言特性和基于类的面向对象特性是有所差别的。
七、字面量的表达能力
1、字面量功能相对来说非常优秀
八、函数式编程
1、javascript能够直接支持的程序设计范本在本质上还是过程式的,但是由于具备了匿名函数,可以把函数作为对象来使用,所以同时也能够支持函数式编程。
九、常量
1、ECMAscript标准中没有规定常量的声明。不过在javascript的自定义增强功能中,是可以对常量进行赋值的。
2、常量名一般都以大写字母表示。
3、赋值方法,关键字const。
const FOO=7;
console.log(FOO)
- /*
- 输出:
- >>7
- */
const FOO = 7;
FOO = 8;
console.log(FOO);
/*输出:>>7*/
document.write(1+'<>');
function f(){
document.write(2+'<>');
}
document.write(3+'<>');
f();
/*
输出结果:
>>1
>>3
>>2
*/
function 函数名(形参,形参~~~~){
函数体
}//声明方法
- 函数名(实参,实参~~~~)//调用方法
function sum(a,b){
return Number(a)+Number(b);
}
document.write(sum(3,4));
/*
输出:
>>7
*/
function(形参){
函数体
}
var sum2=function(a,b){
return Number(a)+Number(b)
}
document.write(sum2(3,4));
/*
输出结果:
7
*/赋值表达式右侧的就是匿名函数表达式
var sum = function (a,b){
return Number(a)+Number(b);
}
var sum2=sum;
document.write(sum(1,2)+"<br/>");
document.write(sum2(3,4));
/*
输出结果:
>>3
>>7
*/
参考书籍资料:
1、javascript编程全解http://www.ituring.com.cn/book/1140
2、javascript 岳英俊http://pan.baidu.com/s/1eQlegKE