这是我参与「第五届青训营」笔记创作活动的第12天。
由于自身js十分薄弱,还是决定先打好基础再进行深入学习。
一、输出语句
alert("xxm"); //弹窗内容
document.write("xxm"); //在body中输出内容
console.log("xxm"); //向控制台输出内容
二、 JS 编写位置
别的不重要,引用外部 js 文件:
<script type="text/javascript" src="js/script.js"></script>
三、基本语法
字面量: 不可变的量,字面量可直接使用
变量: 变量可以保存字面量,变量值可改变
声明变量: 在 js 中使用 var 关键字来声明变量
var xxm = 666; //声明和赋值
标识符: 自主命名的都是标识符,变量名、函数名、属性名都是标识符
命名规则:
1. 可以含有字母、数字、_、$
2. 不能数字开头
3. 不能是 ES 中的关键字、保留字符
4.驼峰命名法
数据类型: 即字面量类型,一共有六种。
- 基本数据类型
- String
var str = "xxm";
在字符串中可以使用 \ 作为转义字符
- Number
包括整数和浮点数,进行浮点运算不一定精确
console.log(typeof xxm); //可以使用运算符 typeof 来检查变量类型
console.log(Number.MAX_VALUE); //js中的最大值
console.log(Number.MIN_VALUE); //js中的最小的正值
//两个特殊情况
console.log(typeof Infinity); //number
console.log(typeof NaN); //number
- Boolean 布尔值
var bool1 = true;
var bool2 = false;
- Null
用来表示空对象
var a = null;
console.log(typeof a); //object
- Undefined
用来表示未定义,声明了变量,但没有给变量赋值
var a = undefined;
console.log(typeof undefined); //undefined
- Object 引用数据类型
- 强制类型转换
-
将其他数据类型转换为 String
1.1 调用被转换数据类型的 toString( ) 方法
var a = 123;
a = a.toString();
//两个特殊情况
//null 和 undifined 没有这个方法,会报错
1.2 调用 String( ) 函数,并将被转换的数据作为参数传递给函数
//String(null) 转为 “null”
//String(undifined) 转为 “undifined”
- 将其他数据类型转换为 Num
2.1 使用 Number( ) 函数
~如果字符串有非数字内容,则转换为 NaN
~如果字符串为空,则转换为 0
~true --> 1,false --> 0
~null --> 0,undefined -->null
2.2 parseInt( ) 和 parseFloat( )
~可以取字符串中的数,非字符串会转换为字符串再 取数
var a = "123a567b"
a = parseInt(a);
console.log(typeof a); //number
console.log(a); //123
补充:其他进制数
~16 进制:以 0x 开头
~ 8 进制:以 0 开头
~ 2 进制:以 0b 开头
a = parseInt(a,10); //不同进制数浏览器可能会有不同解析,第二位是进制
- 将其他数据类型转换为 Boolean
3.1 使用 Boolean( ) 函数
~数字除了 0 和 NaN 都是true
~字符串除了空串 都是true
~null 和 undifined 都是 false
~对象也会转换为 true
运算符:也叫操作符
- 分类
- 算数运算符 + - * / %(%取模运算)
~对非 Number 类型运算会先转换为 Number
~任何值和 NaN 运算为 NaN
~字符串进行加法运算会拼接
~字符串和其他加法运算时,会先转换为字符串,再拼接
除了加法都是会转换成数字
var c = 123;
c = c + ''; //隐式转换为字符串
c = String(c); //两者等同
var d = "123";
d = d - 0; //隐式转换为数值
d = Number(d);
- 一元运算符 + -(正负)++ --
~非 Number 先转换为 Number 后负值
var a = "xxm";
a = +a //可以隐式转换为数字类型
~自增自减问题:
a++ 先运算后自增(值为它本身),++a先自增后运算(值为 a+1)
- 逻辑运算符 ! && ||
var a = "xxm";
a = !!a; //可以隐式转换为布尔类型
~&& 两个都对是 true,|| 两个都错是 false,js 中是短路 && ||
所以:&& 中如果第一个是 false 不会看后面的值,|| 第一个是 true 不看后面的
~非布尔值运算会转换为布尔值后进行运算,再返回值
&&:第一个是 true 返回后面的,第一个是 false 直接返回
||:第一个是 true 直接返回,第一个是 false 返回后面一个*
- 赋值运算符 = += -= /= *= &=
- 关系运算符 > < >= <= == != === !==
~数值比较结果为 Boolean
~只有一个非数值比较会转化为数值,两个都是字符串就不会转换,比较 unicode,一位位进行比较
补充:unicode ----> 控制台中:\xxxx // 网页中:&#十进制
~关于 ==
会做自动的类型转换(=== 不会做类型转换)
console.log(0 == null); //false
console.log(undefined == null); //true
console.log(NaN == NaN); //false NaN 不和任何值相等,包括它本身
//用 isNaN() 来检查是否是 NaN
console.log(isNaN(a));
- 条件运算符 条件表达式?语句1:语句2;
四、几个语句
补充:
- 可以给循环加 label
label:
循环语句
break label; //终止label循环
- 开启计时器可以计算程序性能
console.time("名字");
console.timeEnd("名字");
- 取根号语句
Math.sqrt(num);
五、对象
object分类
- 内建对象
由 ES 标准中定义的对象
如:Math,String,Number,Boolean,Function,Object
- 宿主对象
由 JS 的运行环境提供的对象
如:BOM,DOM
- 自定义对象
由开发人员自己创建的对象
自定义对象部分
object 的使用(增删改查)
- 创建对象
var obj = new Object(); //new关键字调用的函数是构造函数constructor
- 添加属性
obj.name = "xxm"; //对象. 属性名 = 属性值;
obj.gender = "girl";
obj.age = "18";
//另一种方法
var obj2 = {
name: "xxm",
age: 18,
gender: "girl"
};
- 读取属性
console.log(obj.age); //对象.属性名;
// 如果读取没有的属性,不会报错,会返回 undifined
- 删除属性
delete obj.name;
补充:
- 如果使用特殊的属性名(不重要,不用就行了)
obj["123"] = 789;
- in 运算符
用来检查对象中是否含有制定属性
console.log("xxm" in obj); //true
- obj2 = obj 的问题
对象保存的是地址
对象比较时,如果地址不一样值一样,也是不同的
工厂方法创建对象
function createPerson(name , age , gender){
var obj = new Object();
obj.name = name;
obj.age = age;
obj.gender = gender;
obj.sayName = function(){
alert(this.name);
};
return obj;
}
var obj2 = createPerson("xixi", "28", "女");
函数
函数也是一个对象,用于封装功能(代码形式)。
函数的定义
- 创建函数对象
//第一种 不用它
var fun = new Function(); //很少用,主要记住函数也是对象
//第二种 使用函数声明来创建函数
function 函数名([形参1], [形参2]){ //方括号代表可写可不写
语句
}
//第三种 使用函数表达式创建函数,等同于将匿名函数赋值
var 函数名 = function([形参1], [形参2]){
语句
}
- 调用函数
fun();
函数的参数
- 形参
function sum(a,b){ //等同于var a;var b;
console.log(a+b);
}
- 实参
对象也可以作为实参
sum(1,2){ //等同于var a = 1;var b = 2;
补充:
- 立刻执行函数:
(function(){
console.log(a + b);
)(1,2);
- 方法:对象的属性是一个函数,调用其就称调用对象的方法(就是个名字)
- for ... in 语句:枚举对象的属性
for(var n in obj){
console.log("属性名:" + n);
console.log("属性值:" + obj[n]);
}
构造函数
- 首字母大写
- 执行过程:立即创建一个新对象,将新建对象设置为函数中的this,执行函数中的代码,将新建的对象作为返回值返回
function Person(){
}
var per = new Person();
补充:instanceof 检查对象是否是函数的实例
对象 instanceof 构造函数
第二个参数是匹配模式
i---忽略大小写
g---全局匹配模式