ECMAScript 知识点大杂烩:
1、javascript是一种弱类型语言,没有编译阶段,一个变量可以随意赋值,赋什么类型的值都行。
2、在JS当中,当一个变量没有手动赋值的时候,系统默认赋值 undefined,undefined 在 JS 中是一个具体存在值.
3、JS 中的变量是一种弱类型的,那么函数应该怎么定义呢?
语法格式:
第一种方式:
function 函数名(形式参数列表){
函数体;
}
第二种方式:
函数名 = function(形式参数列表){
函数体;
}
JS中的函数不需要指定返回值类型,返回什么类型都行。
在JS当中,函数的名字不能重名,当函数重名的时候,后声明的函数会将之前声明的同名函数覆盖。
4、全局变量:
在函数体之外声明的变量属于全局变量,全局变量的生命周期是:
浏览器打开时声明,浏览器关闭时销毁,尽量少用。因为全局变量会一直在浏览器的内存当中,耗费内存空间。
能使用局部变量尽量使用局部变量。
局部变量:
在函数体当中声明的变量,包括一个函数的形参都属于局部变量,
局部变量的生命周期是:函数开始执行时局部变量的内存空间开辟,函数执行结束之后,局部变量的内存空间释放。
局部变量生命周期较短。
5、当一个变量声明的时候没有使用 var关键字,那么不管这个变量是在哪里声明的,都是全局变量。
6、JS 中数据类型:
原始类型:Undefined、Number、String、Boolean、Null
引用类型:Object以及Object的子类
7、JS 中有一个运算符叫做typeof,这个运算符可以在程序的运行阶段动态的获取变量的数据类型。
typeof 运算符的语法格式:
typeof 变量名
typeof运算符的运算结果是以下6个字符串之一:注意字符串都是全部小写。
"undefined"
"number"
"string"
"boolean"
"object"
"function"
null属于Null类型,但是typeof运算符的结果是"object"
8、在JS当中比较字符串是否相等使用“==”完成。没有equals。
9、数据类型:
1)Undefined 类型只有一个值,这个值就是 undefined ,当一个变量没有手动赋值,系统默认赋值 undefined 或者也可以给一个变量手动赋值 undefined。
2)Number 类型包括哪些值?
-1 0 1 2 2.3 3.14 100 .... NaN Infinity(整数、小数、正数、负数、不是数字、无穷大都属于Number类型)
isNaN() : 结果是true表示不是一个数字,结果是false表示是一个数字。
parseInt ( ) 函数
parseFloat ( ) 函数
Math.ceil ( ) 函数(Math是数学类,数学类当中有一个函数叫做ceil(),作用是向上取整)
关于NaN (Not a Number,不是一个数字,但属于Number类型),什么情况下结果是一个NaN呢?
运算结果本来应该是一个数字,最后算完不是一个数字的时候,结果是NaN.
3)JS 中的布尔类型永远都只有两个值:true 和 false。
在Boolean类型中有一个函数叫做:Boolean()。
语法格式:
Boolean(数据)
Boolean()函数的作用是将非布尔类型转换成布尔类型。
<script type="text/javascript">
// 规律:“有"就转换成true,"没有"就转换成false.
alert(Boolean(1)); // true
alert(Boolean(0)); // false
alert(Boolean("")); // false
alert(Boolean("abc")); // true
alert(Boolean(null)); // false
alert(Boolean(NaN)); // false
alert(Boolean(undefined)); // false
alert(Boolean(Infinity)); // true
</script>
4)String类型:
在JS当中字符串可以使用单引号,也可以使用双引号。
var s1 = 'abcdef';
var s2 = "test";
在JS当中,怎么创建字符串对象呢?
两种方式:
第一种:var s = "abc";
第二种(使用JS内置的支持类String): var s2 = new String("abc");
需要注意的是:String是一个内置的类,可以直接用,String的父类是Object。
关于String类型的常用属性和函数?
常用属性:
length 获取字符串长度
常用函数:
indexOf 获取指定字符串在当前字符串中第一次出现处的索引
lastIndexOf 获取指定字符串在当前字符串中最后一次出现处的索引
replace 替换
substr 截取子字符串
substring 截取子字符串
toLowerCase 转换小写
toUpperCase 转换大写
split 拆分字符串
<script type="text/javascript">
// replace (注意:只替换了第一个),继续调用replace方法,就会替换第“二”个.
alert("name=value%name=value%name=value".replace("%","&")); // name=value&name=value%name=value
// 想全部替换需要使用正则表达式.
alert("name=value%name=value%name=value".replace("%","&").replace("%", "&")); // name=value&name=value&name=value
// 考点:经常问 substr和substring的区别?
// substr(startIndex, length)
alert("abcdefxyz".substr(2,4)); //cdef
// substring(startIndex, endIndex) 注意:不包含endIndex
alert("abcdefxyz".substring(2,4)); //cd
</script>
5)在JS当中怎么定义类?怎么new对象?
定义类的语法:
第一种方式:
function 类名(形参){
}
第二种方式:
类名 = function(形参){
}
创建对象的语法:
new 构造方法名(实参);
Object类包括哪些属性?
prototype属性(常用的,主要是这个):作用是给类动态的扩展属性和函数。
constructor属性
<script type="text/javascript">
// 这种方式就表示把sayHello当做一个类来创建对象.
var obj = new sayHello(); // obj是一个引用,保存内存地址指向堆中的对象.
// 定义一个学生类
function Student(){
alert("Student.....");
}
// 当做普通函数调用
Student();
// JS中的类的定义,同时又是一个构造函数的定义,在JS中类的定义和构造函数的定义是放在一起来完成的.
function User(a, b, c){ // a b c是形参,属于局部变量.
// 声明属性 (this表示当前对象),User类中有三个属性:sno/sname/sage
this.sno = a;
this.sname = b;
this.sage = c;
}
// 创建对象
var u1 = new User(111, "zhangsan", 30);
// 访问对象的属性
alert(u1.sno);
alert(u1.sname);
alert(u1.sage);
// 访问一个对象的属性,还可以使用这种语法
alert(u2["sno"]);
alert(u2["sname"]);
alert(u2["sage"]);
//定义类的另一种语法:
Product = function(pno,pname,price){
// 属性
this.pno = pno;
this.pname = pname;
this.price = price;
// 函数
this.getPrice = function(){
return this.price;
}
}
var xigua = new Product(111, "西瓜", 4.0);
var pri = xigua.getPrice();
alert(pri); // 4.0
// 可以通过prototype这个属性来给类动态扩展属性以及函数
Product.prototype.getPname = function(){
return this.pname;
}
// 调用后期扩展的getPname()函数
var pname = xigua.getPname();
alert(pname)
// 给String扩展一个函数
String.prototype.suiyi = function(){
alert("这是给String类型扩展的一个函数,叫做suiyi");
}
"abc".suiyi();
</script>
10、null NaN undefined这三个值有什么区别 :
<script type="text/javascript">
// == 是等同运算符
alert(1 == true); // true
alert(1 === true); // false
// null NaN undefined 数据类型不一致.
alert(typeof null); // "object"
alert(typeof NaN); // "number"
alert(typeof undefined); // "undefined"
// null和undefined可以等同.
alert(null == NaN); // false
alert(null == undefined); // true
alert(undefined == NaN); // false
/*
在JS当中有两个比较特殊的运算符
==(等同运算符:只判断值是否相等)
===(全等运算符:既判断值是否相等,又判断数据类型是否相等)
*/
alert(null === NaN); // false
alert(null === undefined); // false
alert(undefined === NaN); // false
</script>