1. 书写位置
与css一样分为行内、内嵌和外部。
常用的是外部,使用单引号,标签中间不可以加其他内容。
<script src="demo.js">
</script>
2.类型
数字型
- 可以为整数或小数
- 最大值Number.MAX_VALUE,最小值Number.MAX_VALUE
- 无穷大,infinity
- 无穷小,-infinity
- NAN,not a number,非数值型
3.字符型
- 引号外单内双,内双外单
- .length属性获得字符串的长度
- 字符串 + 任何类型 = 拼接的字符串
4.获得数据类型
- “tpyeof 数据”
- prompt取过来的值是字符串型的
5.类型转换
5.1转化成字符串
- 变量. toString()
- String(变量)强制转化
- 变量
+
‘字符串’
5.2转化成数字类型
- parselnt(String)
- parseFloatString)
- Number(String)
- 隐式转换:字符型 - / * 0
5.3转化成布尔类型
Boolean(),无意义的类型返回的是ture,有意义的返回false。
6.逻辑短路原理
进行逻辑计算时,如果左边的算式已有结果,则不会进行到右边。
6.1逻辑与
- 表达式1 && 表达式2
- 如果表达式1为真,则返回表达式2
- 如果表达式1为假,则返回表达式1
6.2逻辑或
- 表达式1 && 表达式2
- 如果表达式1为假,则返回表达式2
- 如果表达式1为真,则返回表达式1
7.运算符优先级
优先级 | 符号 | 顺序 |
---|---|---|
1 | 小括号 | () |
2 | 一元运算符 | ++、 – 、! |
3 | 算数运算符 | 先*、 /、%后+、 - |
4 | 关系运算符 | > 、 < 、 >=、 <= |
5 | 相等运算符 | == 、 !=、 ===、 != = |
6 | 逻辑运算符 | 先 && 后|| |
7 | 赋值运算符 | = |
8 | 逗号运算符 | , |
关系运算符默认转换数据类型。
8.do while循环
while里是执行循环的条件。
案例:输入用户名和密码,如果用户名为‘admin’,密码为‘123456’就提示登录成功,否则一直弹出输入框。
<script>
do {
var username = prompt('请输入用户名');
var psw = prompt('请输入用户密码');
} while (username != 'admin' && psw != 123456);
alert('登录成功!');
</script>
9.数组
- 创建一个空的数组:var arr = [ ];
- 数组长度:数组名.length
- 通过修改数组长度来新增数组,新增的元素是undefined
- 直接修改索引值赋值,如果索引号没有被使用则追加,如果使用了则覆盖
- 不能直接给数组名赋值
- 案例:选出数组中大于10的数组成新的数组
- 冒泡排序:输入任意的五个数进行从小到大的排序。
var arr = [];
var num = 5;
for (i = 1; i <= num; i++) {
arr[i - 1] = prompt('请输入第' + i + '个数');
};
for (i = 0; i < arr.length - 1; i++)
for (j = 0; j < arr.length - i - 1; j++) {
var temp = 0;
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
};
console.log(arr);
9.函数
9.1函数结构
== 函数关键字命名==
函数声明:
function 函数名(形参){
};
函数调用:
函数名(实参);
必须先声明再调用,如果实参大于形参,则多出的实参不被接受,如果实参小于形参,则多出的形参定义为undefined。
== 函数表达式命名(匿名函数)==
var 变量名 = function(){};
调用时,使用变量名(形参)
9.2return注意事项
- 作为终止,return后面的代码将不会执行
- 只能返回一个值,不管写多少个值,值返回最后一个值
- 没有return返回undefined
9.3arguments对象
- 存储了所有的实参
- 伪数组
- 有length属性
- 按索引存储
- 可以遍历
- 只有函数才有
9.4作用域链
- 内部函数可以访问外部函数的变量,采用链式查找
- 采取就近原则
9.5预解析
将变量var和函数function提前到作用域的最前面
- 变量提升:将变量声明提升到当前作用域的最前面,而赋值不提升
- 函数提升:将函数声明提升到当前作用域的最前面,而调用不提升
案例:
答案为9*6 报错
10对象
10.1对象的三种方式
(1)
var 对象名 = {
属性名:属性值,
方法名:function(){},
}
调用属性:
1.对象名.属性名
2.对象名[‘属性名’]
调用方法:
对象名.方法名()
(2)
利用new object创建对象,利用等号赋值的方法添加对象的属性和方法,每个属性和方法用分号分开。
var 对象名 = new Object();
对象名.属性名 = 属性值;
对象名.方法名 =function(){};
(3)
构造函数,用于创建多个属性与方法相似的对象,相当于类。
构造函数声明
function 构造函数名(形参){
this.属性 = 形参;
this.方法 = function(){};
}
构造函数调用:
var 对象名 = new 构造函数名(实参);
注意事项:
- 构造函数首字母要大些
- 函数不需要return
- 调用函数返回的是一个对象
- 构造函数时必须使用 new
- 只需要new 构造函数名()就创建了一个对象
- 构造函数时属性和方法必须添加this,指向创造的对象
案例:
function Star(name, type, blood) {
this.name = name;
this.type = type;
this.blood = blood;
this.attack = function(attack) {
console.log('攻击:' + attack);//注意字符串的拼接
};
}
var houYi = new Star('houYi', '射手', 100)
houYi.attack('远攻');
console.log(houYi);
10.2new关键字
1.创建一个新的空对象
2.this指向这个对象
3.添加新的属性和方法
4.返回这个新对象
10.3遍历对象
for in语句
用法:
for(var 变量名 in 对象名){}
for(var k in obj){
console.log(k) // 输出的是属性名
console.log(obj[k]) // 输出的是属性值
}