js程序设计01——基本概念

时间:2024-10-11 20:36:08

本文为js高级程序设计学习笔记,笔记中不乏本人学习js的一些心得demo,喜欢的朋友可以直接参考原书“javascript高级程序设计”,写本笔记的目的是对js中容易出错、不易理解的地方作个笔记,以免后期继续踩坑。

1、语法

  • 区分大小写:比如typeof用于测试数据类型,不同于typeOf,一个func完全可以定义为typeOf
  • 标识符:首字符必须是字母、下划线或$,之后可以是数字、字母、下划线或$;标识符不能使用系统关键字及保留字,比如var、true、false、null、let等
  • 严格模式:

严格模式是ECMAScript 5中引入的概念,是为js定义解析以及执行模型的一种机制,也是为了兼容旧版本的ECMAScript版本而引入的,就是一种编译指示,可以确定ECMAScript 3版本编译运行时的一些不确定行为。使用"use strict",方法如下:

function say(){
"use strict";
console.log("hello strict mode");
} say();

2、变量

所有未经初始化的变量始终为undefined,不论变量类型:

function say(){
var message = "hello message";
}
say();
alert(message); //message未定义为undefined

但是如果省略了var关键字,则message自动上升为全局变量,不会报错:

function say(){
message = "hello message";
}
say();
console.log(message);

结果:

js程序设计01——基本概念

变量声明初始化允许同时进行,比如:

var m1 = "1",m2 = "2",m3 = [1,2,3];
console.log(m1);
console.log(m2);
console.log(m3);

js程序设计01——基本概念

3、数据类型

ECMAScript 5定义js有5中基本类型+1种复杂数据类型(引用类型),基本类型:Undefined、Null、Boolean、Number、String,复杂类型:Object

其中typeof操作符是用来测试数据类型的,typeof的返回值可以是如下几种:

“undefined”——唯一的Undefined类型值,表示“未定义”;
“boolean”——对于Boolean的true or false返回;
“string”——字符串返回;
“number”——数值类型值返回;
“object”——Object类型或者Null类型均返回;
“function”——函数返回;

下面是简单测试:

var m1 = "message",m2 = true,m3 = 98,m4,m5 = {},m6 = null,m7 = function(){};

console.log(typeof m1);
console.log(typeof m2);
console.log(typeof m3);
console.log(typeof m4);
console.log(typeof m5);
console.log(typeof m6);
console.log(typeof m7);

js程序设计01——基本概念

Boolean类型的字面值true和false是区分大小写的,所有数据类型均可通过Boolean()转换函数转换为Boolean类型,对于Number类型,任何非零(包括无穷大)转换为true,0和NaN转换为false;对于Object类型来说,转换为true,null转换为false

关于NaN:

NaN(Not a Number)即非数值,是一个特殊数值,NaN有2个特点:

  • 任何涉及NaN的操作都会返回NaN
  • NaN与任何值都不相等,包括NaN本身

关于NaN的测试如下:

console.log(NaN / 10);    //NaN
console.log(NaN / 0);      //NaN
console.log(NaN == NaN);    //false
console.log(isNaN(NaN));    //true
console.log(isNaN(""));    //false
console.log(isNaN(12));    //false
console.log(isNaN("awd"));    //true
console.log(isNaN("awd12"));    //true
console.log(isNaN("12awd"));    //true
console.log(isNaN(null));    //false
console.log(isNaN({}));      //true  
console.log(isNaN({valueOf:function(){      //false,如果是对象则调用其valueOf方法,查看返回是否匹配NaN
return -1;
}}));
console.log(isNaN({valueOf:function(){      //true
return "awdw";
}}));

关于Number()函数:

Number()函数用于将一个非数值转换为数值类型,Boolean直接返回1或0,null返回0,undefined返回NaN,如果是字符串:空字符串返回0,非空返回去除前导0的字符值,比如"011"返回11,如果非数值字符串返回NaN,比如"this is test"返回NaN;如果是对象,则调用对象的valueOf方法返回。

关于Object类型:

创建:

var o = new Object();

Object的每个实例都有如下属性和方法:

  • constructor:保存着用于创建当前对象的函数
  • isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型
  • hasOwnProperty(propertyName):用于检查给定的属性是否在当前对象实例中
  • propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in 语句枚举
  • toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应
  • toString():返回对象的字符串表示
  • valueOf():返回对象的字符串、数值或布尔值表示

4、函数类型

ECMAScript的函数支持不定参数,实际上通过arguments对象即可直接获取请求的参数,函数定义时可以不用指定参数,使用时也可以传入任意数量参数:

function say(){
for(var i=0,len=arguments.length;i<len;i++){
console.log(arguments[i]);
}
} say(12,"343","1231");

js程序设计01——基本概念

function say2(name,age){
console.log(name);
console.log(name == arguments[0]);
console.log(age);
console.log(age == arguments[1]);
} say2("admin",23);

js程序设计01——基本概念

ECMAScript的函数不支持重载,如果定义了2个同名函数,则第二个会覆盖第一个函数:

function say(){
console.log(1111);
} say();      //2222 function say(){
console.log(2222);      
} say();      //2222