一、JS三种书写位置
- 行内式
直接写到元素的内部。
<input type="button" value="唐伯虎" onclick="alert('秋香姐')">
- 内嵌式
写在script标签内部。
<script>
alert('沙漠骆驼');
</script>
- 外部式
通过script标签引入外部js文件。
<script src="my.js"></script>
二、输入输出
- 输入
prompt('请输入您的年龄');
- 输出
alert('计算的结果是');
console.log('我是程序员能看到的');
三、变量
- 变量命名
变量名可以由字母、数字、下划线、美元符号组成,但不能数字开头,不能和关键字、保留字重名,例如name。变量一般用小驼峰命名法,最好要有实际意义。 - 变量语法
var sex;
console.log(sex);
qq = 110;
console.log(qq);
四、数据类型
- 分类
·简单数据类型: 1)Number 数值型,包含整形、浮点型,默认值0 2)Boolean 布尔型,默认值false 3)String 字符串,默认值“” 4)Undefined 声明了变量没有给值,例如var a; 5)Null 声明了变量为空值,例如var a=null; ·复杂数据类型: 6)Object 对象 - JS是动态语言,变量的数据类型是可以变化的。
var x = 10;
x = 'pink';
- 举例
var num1 = 012;
console.log(num1);
var num2 = 0xa;
console.log(num2);
console.log(Number.MAX_VALUE);
console.log(Number.MIN_VALUE);
console.log(Number.MAX_VALUE * 2);
console.log(-Number.MAX_VALUE * 2);
console.log('啦啦啦' - 100);
console.log(isNaN(12));
console.log(isNaN('啦啦啦'));
var flag1 = true;
var flag2 = false;
console.log(flag1 + 1);
console.log(flag2 + 1);
var str1 = '我是一个\n程序员';
console.log(str1);
var str2 = 'my name is andy';
console.log(str2.length);
console.log(12 + 12);
console.log('12' + 12);
var str3;
console.log(str3);
var variable = undefined;
console.log(variable + 'pink');
console.log(variable + 1);
var space = null;
console.log(space + 'pink');
console.log(space + 1);
- 获取变量的数据类型 typeof
var num = 10;
console.log(typeof num);
var str = 'pink';
console.log(typeof str);
var flag = true;
console.log(typeof flag);
var vari = undefined;
console.log(typeof vari);
var timer = null;
console.log(typeof timer);
var age = prompt('请输入您的年龄');
console.log(age);
console.log(typeof age);
var num1 = +prompt('请输入第一个数据:');
- 数据类型的转换
var num = 10;
var str = num.toString();
console.log(typeof str);
console.log(String(num));
console.log(num + '');
console.log(parseInt('3.14'));
console.log(parseInt('120px'));
console.log(parseInt('rem120px'));
console.log(parseFloat('3.14'));
console.log(parseFloat('120px'));
console.log(parseFloat('rem120px'));
var str = '123';
console.log(Number(str));
console.log(Number('12'));
console.log('12' - 0);
console.log('123' - '120');
console.log('123' * 1);
console.log(Boolean(''));
console.log(Boolean(0));
console.log(Boolean(NaN));
console.log(Boolean(null));
console.log(Boolean(undefined));
console.log('-----------其余的都为TRUE------------');
console.log(Boolean('123'));
console.log(Boolean('你好吗'));
五、运算符
- 算数运算符
加+、减-、乘*、除/、取余%、自加++、自减–
console.log(1 + 1);
console.log(1 - 1);
console.log(1 * 1);
console.log(1 / 1);
console.log(5 % 3);
console.log(3 % 5);
console.log(0.1 + 0.2);
console.log(0.07 * 100);
var num = 0.1 + 0.2;
console.log(num == 0.3);
var p = 10;
console.log(++p + 10);
var age = 10;
console.log(age++ + 10);
- 比较运算符
大于>、小于<、大于等于>=、小于等于<=、值等于、全等于
console.log(3 >= 5);
console.log(2 <= 4);
console.log(18 == '18');
console.log(18 === '18');
- 逻辑运算符
0、’’、null、undefined、NaN五种为假。
console.log(3 > 5 && 3 > 2);
console.log(3 < 5 && 3 > 2);
console.log(3 > 5 || 3 > 2);
console.log(3 > 5 || 3 < 2);
console.log(!true);
console.log(123 && 456);
console.log(0 && 456);
console.log(123 || 456 || 456 + 123);
console.log(0 || 456 || 456 + 123);
var num = 0;
console.log(123 || num++);
console.log(num);
- 赋值运算符
=、+=、-=、*=、/=、%=
var num = 10;
num += 5;
console.log(num);
var age = 2;
age *= 3;
console.log(age);
- 运算符优先级
console.log(4 >= 6 || '人' != '阿凡达' && !(12 * 2 == 144) && true)
var num = 10;
console.log(5 == num / 2 && (2 + 2 * num).toString() === '22');
var a = 3 > 5 && 2 < 7 && 3 == 4;
console.log(a);
var b = 3 <= 4 || 3 > 1 || 3 != 2;
console.log(b);
var c = 2 === "2";
console.log(c);
var d = !c || b && a;
console.log(d);
六、流程控制
- 分支
1)if 分支语句
var age = 20;
if (age >= 18) {
console.log('你可以进网吧');
}
var year = 2021;
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
console.log('是闰年');
} else {
console.log('是平年');
}
var score = 78;
if (score >= 90) {
console.log('A');
} else if (score >= 80) {
console.log('B');
} else {
console.log('C');
}
2)switch 分支语句
var num = 1;
switch (num) {
case 1:
console.log('这是1');
break;
case 2:
console.log('这是2');
break;
default:
console.log('没有匹配结果');
}
3)三元表达式
var num = 10;
var result = num > 5 ? '是的' : '不是的';
console.log(result);
- 循环
1)for 循环
var str3 = '';
for (var i = 1; i <= 9; i++) {
for (var j = 1; j <= i; j++) {
str3 += j + '*' + i + '=' + (i * j) + '\t';
}
str3 += '\n';
}
console.log(str3);
2)while 循环 当条件比较复杂的时候用while,其他情况尽量都用for。
var sum = 0;
var j = 1;
while (j <= 100) {
sum += j;
j++;
}
console.log(sum);
3)do while 循环
var i = 1;
do {
console.log('how are you?');
i++;
} while (i > 100)
4)break和continue
for (var i = 1; i <= 5; i++) {
if (i == 3) {
break;
}
console.log('我正在吃第' + i + '个包子');
}
for (var i = 1; i <= 5; i++) {
if (i == 3) {
continue;
}
console.log('我正在吃第' + i + '个包子');
}
七、数组
数组(Array) 就是一组数据的集合,存储在单个变量下。
- 创建数组
var arr = new Array();
var arr = [];
var arr1 = [1, 2, '啦啦啦', true];
- 访问数组元素(数组下标是从0开始的)
console.log(arr1);
console.log(arr1[0]);
console.log(arr1[4]);
- 遍历数组
var arr2 = ['red', 'green', 'blue'];
for (var i = 0; i < 3; i++) {
console.log(arr2[i]);
}
- 数组长度 arr.length
for (var i = 0; i < arr2.length; i++) {
console.log(arr2[i]);
}
- 数组增加元素
var arr2 = ['red', 'green', 'blue'];
arr2.length = 5;
console.log(arr[3]);
console.log(arr[4]);
var arr2 = ['red', 'green', 'blue'];
arr2[3] = 'pink';
arr2[4] = 'hotpink';
console.log(arr2);
- 应用举例
var arr = ['red', 'green', 'blue', 'pink', 'purple', 'hotpink'];
var newArr = [];
for (var i = arr.length - 1; i >= 0; i--) {
newArr[newArr.length] = arr[i]
}
console.log(newArr);
八、函数
封装了一段可以被重复执行调用的代码块 ,目的是让大量代码重复使用。
- 函数形式
sayHi();
function sayHi() {
console.log('hi~~');
}
sayHi();
const fun = function (n, m) {
return n + m;
}
fun(1, 2);
function fun1(a = 1, b = 2) {
return a + b;
}
console.log(fun1());
- 形参实参个数匹配
function getSum1(num1, num2) {
console.log(num1 + num2);
}
getSum1(1, 2);
getSum1(1, 2, 3);
getSum1(1);
- 函数的返回值
function getSum(num1, num2) {
return num1 + num2;
alert('我是不会被执行的哦!')
}
console.log(getSum(1, 2));
function fn(num1, num2) {
return num1, num2;
}
console.log(fn(1, 2));
function getResult(num1, num2) {
return [num1 + num2, num1 - num2, num1 * num2, num1 / num2];
}
var re = getResult(1, 2);
console.log(re);
function fun2() {
}
console.log(fun2());
- arguments对象
只有函数才有arguments对象,arguments里面存储了所有传递过来的实参。
function fn() {
for (var i = 0; i < arguments.length; i++) {
console.log(arguments[i]);
}
}
fn(1, 2, 3);
- 函数间相互调用
function fn1() {
console.log(111);
fn2();
console.log('fn1');
}
function fn2() {
console.log(222);
console.log('fn2');
}
fn1();
- 匿名函数(函数表达式)
利用函数关键字自定义函数的为“命名函数”,而与之对应的即“匿名函数”。 函数表达式里面存的是函数,通过变量名来调用函数。
var fun = function (aru) {
console.log('我是函数表达式');
console.log(aru);
}
fun('啦啦啦');
- 立即执行函数
用来代码封装,外界访问不到里面的变量,仅执行一次。
(function () {
let a = 10;
let b = 20;
console.log(a + b);
})()
九、作用域
- JS的作用域
var num1 = 10;
var num1 = 30;
console.log(num1);
function fn() {
var num2 = 20;
console.log(num2);
}
fn();
if (3 < 5) {
let num3 = 10;
}
console.log(num3);
- 变量的作用域
var num = 10;
console.log(num);
function fn() {
console.log(num);
}
fn();
function fun(aru) {
var num1 = 10;
num2 = 20;
}
fun();
- 作用域链
作用域链:内部函数访问外部函数的变量,采取的是“链式查找”的方式来决定取那个值,即就近原则!
var num = 10;
function fun1() {
var num = 20;
function fun2() {
console.log(num);
}
fun2();
}
fun1();
十、预解析
JS引擎运行分为两步:预解析、代码执行。 1)预解析:JS引擎把所有的var、function声明提升到当前作用域的最前面。 2)代码执行:按照代码书写的顺序从上往下执行。
预解析分为:变量预解析(变量提升)、函数预解析(函数提升) 1)变量提升:把所有的“变量声明”提升到当前的作用域最前面,不提升赋值操作。 2)函数提升:把所有的“函数声明 ”提升到当前作用域的最前面,不调用函数。
- 变量提升
console.log(num);
var num = 10;
- 函数提升
fn();
function fn() {
console.log(11);
}
fun();
var fun = function () {
console.log(22);
}
十一、JS对象
JS对象笔记
|