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>