JavaScript基础笔记(一)基本概念

时间:2024-06-19 12:05:14

基本概念

一、语法

一)区分大小写

二)标识符

书写规则同Java

三)注释

四)严格模式

1.在整个脚本中启用严格模式:在顶部添加

"use strict"

2.指定函数在严格模式下执行:

function doSth() {
"use strict"
//函数体
}

二、变量

ECMAScript变量类型是松散类型,所谓松散类型就是可以保存任何类型的数据。

//定义变量
var msg;
//注意由var定义的变量是局部变量,如果变量在函数中函数退出后变量就会被销毁 //省略var定义并初始化一个全局变量
msg2 = "Hi"
//不推荐在函数中定义全局变量,因为在局部作用域中定义全局变量很难维护,
//函数中的全局变量也会因为不会马上就用定义导致不必要的混乱 //定义多个
var a = 1,b = 'yes',c = 5;

三、数据类型

五种基本数据类型:Null,Undefined, Boolean, Number, String

一种复杂数据类型:Object,Object本质上是由一组无序的名值对组成。

ECMAScript不支持任何创建自定义类型机制,所以所有的类型最终都将是上述6种类型之一。

typeof操作符:用于检测变量类型。对一个值使用该操作符会返回下列字符串之一:

1."undefined":

2."boolean"

3."string"

4."number"

5."object":如果该值是对象或者null

6."function"

一)Undefined类型

Undefined类型只有一个值:undefined

 var msg;
var name = undefined;
console.log(msg == undefined); //true
console.log(name === undefined); //true
// console.log(age); //报错----"age is not defined"
console.log(typeof age); //"undefined"-----对于未声明的变量,只能执行该操作

所以,显示地初始化变量是最吼的!!!!+1s

二)Null类型

Null也只有一个值:null。

undefined派生于null

alert(null == undefined); //true

三)Boolean类型

要将一个值转换为Boolean类型可以调用Boolean()函数。

各种类型转换为Boolean类型

数据类型                                   转换为true的值                                  转换为false的值

String                                    任何非空字符串                                   ""即空串

Number                                 任何非零数字                                      0和NaN

Object                                   任何Object                                           null

Undefined                             n/a (不适用)                                    undefined

注意:

var msg = "hi";
if (msg) { //自动转换为Boolean类型
console.log("msg is true");
}

四)Number类型

console.log(typeof Infinity); //number
console.log(typeof NaN); //number

1.整数

可以是十进制八进制(八进制严格模式无效)十六进制

var a = 070  //八进制56
var b = 079 //无效的八进制,解析为79

2.浮点数

var a = 1.0    //自动解析为1
var b = .123 //有效不推荐
var c = 1.23e3 // if (0.3+0.2 == 0.5) { //因为浮点数计算时精度问题,不要这样做
}

3.数值范围

最小:Number.MIN_VALUE      最大:Number.MAX_VALUE    超出范围自动转换为Infinity,Infinity不能参与数值计算。

判断是否属于最大与最小之间可以用:isFinite(num)函数。

4.NaN

即(Not a number)是一个特殊数值,表示本来要返回数值而没有返回的情况(这样就不用报错了)。

注意:1.任何涉及NaN的操作都会返回NaN       2.NaN与任何数值都不相等,包括其本身。

isNaN()

console.log(isNaN(NaN));    //true
console.log(isNaN("Yellow")); //true
console.log(isNaN("100")); //false

5.数值转换

1.Number()函数:

可用于任何数据类型

Boolean值分别转换为1和0

null转换为0

undefined转换为NaN

字符串:

只包含数值转换为10进制,包含有效的16进制格式转换为10进制,空串转换为0,其余转换为NaN。

如果是对象则先调用valueOf()函数,如果得到NaN则再调用toString()

var num1 = Number("Hello world!"); //NaN
var num3 = Number("000011"); //

2.parseInt()函数:

parseInt()函数会忽略字符串前面的空格,直到找到第一个非空字符,如果第一个字符不是数字或者负号就返回NaN

var num1 = parseInt("1234blue"); //
var num2 = parseInt(""); // NaN
var num3 = parseInt("0xA"); // 10(十六进制数)
var num4 = parseInt(22.5); //
var num5 = parseInt("070"); // 56(八进制数)
var num1 = parseInt("AF",); //
var num2 = parseInt("AF"); //NaN

五)String类型

1.String 类型用于表示由零或多个 16 位 Unicode 字符组成的字符序列,即字符串。字符串可以由双
引号(")或单引号(')表示 (无区别)。

2.ECMAScript 中的字符串是不可变的

3.转换为字符串可用toString()函数,也可用String()函数:

 如果值有 toString()方法(null和undefined没有这个方法),则调用该方法(没有参数)并返回相应的结果;
 如果值是 null,则返回"null";
 如果值是 undefined,则返回"undefined"。

三)Object类型

ECMAScript中类型是所有他的实例的基础,即Object具有的所有方法和属性同样存在于更具体的对象中。

Object每个实例具有的方法和属性:

1)constructor:保存着创建当前对象的函数,比如,Object()

2)hasOwnProperty(propertyName):用于检查给定的属性在对象实例中(而不是实例的原型中)是否存在。其中propertyName必须以字符串的形式指定。

3)propertyIsEnumerable(propertyName):检查给定的语句能否用for-in语句来枚举。同样propertyName必须是字符串。

4)toLocalString()

5)toString()

6)valueOf()

注意:从技术角度讲, ECMA-262 中对象的行为不一定适用于 JavaScript 中的其他对象。浏览器环境中的对象,比如 BOM 和 DOM 中的对象,都属于宿主对象,因为它们是
由宿主实现提供和定义的。 ECMA-262 不负责定义宿主对象,因此宿主对象可能会也可能不会继承 Object。

三、操作符

1.布尔操作符特别的地方

1)逻辑与(&&):

 如果第一个操作数是对象,则返回第二个操作数;
 如果第二个操作数是对象,则只有在第一个操作数的求值结果为 true 的情况下才会返回该
对象;
 如果两个操作数都是对象,则返回第二个操作数;
 如果有一个操作数是 null,则返回 null;
 如果有一个操作数是 NaN,则返回 NaN;
 如果有一个操作数是 undefined,则返回 undefined。

2)逻辑与(||):

 如果第一个操作数是对象,则返回第一个操作数;
 如果第一个操作数的求值结果为 false,则返回第二个操作数;
 如果两个操作数都是对象,则返回第一个操作数;
 如果两个操作数都是 null,则返回 null;
 如果两个操作数都是 NaN,则返回 NaN;
 如果两个操作数都是 undefined,则返回 undefined。

四、语句

for in 对对象的属性进行遍历,其顺序不可预测。

label语句:

var num = 0;
outermost:
for (var i=0; i < 10; i++) {
for (var j=0; j < 10; j++) {
if (i == 5 && j == 5) {
break outermost;
}
num++;
}
}
alert(num); //

使用with语句会导致性能下降,调试困难,不建议使用。

switch语句

可以在switch()括号中使用任何类型,case中也不一定是常量,可以是变量或者表达式。

注意:switch语句在比较时使用的是全等符,因此不会发生类型转换。

五、函数

语法:

function funName() {
//doSth
}

注意:

1.调用函数时必须带上括号

2.不必指定返回值,当然也可以指定

3.return语句不带任何返回值时,函数在停止后返回undefined

4.函数参数可以是任意多个,调用函数时可以传递任意多个参数,不一定与定义时相等,

因为这个特性ECMAScript中函数不能重载,后定义的函数会覆盖先定义的函数。

之所以会出现4中的情况,ECMAScript函数在函数内部时用一个类似数组的arguments对象来表示的,可以像用数组一样使用arguments对象。

我们可以根据arguments的长度实现一个伪重载:

function doAdd() {
if(arguments.length == 1) {
alert(arguments[0] + 10);
} else if (arguments.length == 2) {
alert(arguments[0] + arguments[1]);
}
}