JS书写位置:
1.行内式 直接写在元素内部
2.内嵌式js
3.外部js <script src="my.js"></script>
JS注释:
单行注释 //
多行注释 shift+alt+a
JS输入输出语句:
prompt('这是一个输入框')
alert('弹出警示框')
变量:
变量初始化var myname = 'zxy达咩'
(变量值为数字可以不加引号)
更新变量 myname = 'zxy不达咩'
声明变量的特殊情况
只声明不赋值结果是undefined,不声明不赋值报错,允许不声明直接赋值使用
交换两个变量值:
需要一个临时变量
<script>
var temp;
var a1 = 1;
var a2 = 2;
temp = a1;
a1 = a2;
a2 = temp;
</script>
变量的数据类型:
js是动态语言,变量的数据类型可以变化
var x = 10;
x = 'zxy'
数字型Number:
八进制数字前加0,十六进制加#
数字型的最大值Number.MAX_VALUE
1.7976931348623157e+308
数字型的最小值Number.MIN_VALUE
5e-32
无穷大Infinity
无穷小-Infinity
非数字NaN
isNaN()这个方法用来判断非数字,是数字 false,不是数字 true:
console.log(isNaN(12)); //false
console.log(isNaN('zxy')); //true
字符串型:
字符串嵌套 外双内单,外单内双
字符串转义符
字符串长度 length
字符串拼接 + 号总结口诀:数值相加 ,字符相连
拼接加强 引引加加
布尔型 undefined Null:
一个声明后没有被赋值的变量会有一个默认值 undefined ( 如果进行相连或者相加时,注意结果)
一个声明变量给 null 值,里面存的值为空(学习对象时,我们继续研究null)
var variable;
console.log(variable); // undefined
console.log('你好' + variable); // 你好undefined
console.log(11 + variable); // NaN
console.log(true + variable); // NaN
var vari = null;
console.log('你好' + vari); // 你好null
console.log(11 + vari); // 11
console.log(true + vari); // 1
获取变量的数据类型:
console.log(typeof 类型)
转换为字符型:
1.把数字型转换为字符串类型 变量.toString()
2.利用String(变量)
3. !利用 + 拼接字符串 隐式转换 console.log(num + '')
转换为数字型:
1.!parseInt('')
得到的是整数
4. !parseFloat('')
得到的是小数,浮点数
5. 利用Number(变量)
6. 利用算数运算 隐式转换 console.log('12'-0)
简单加法器:
var num1 = prompt('请您输入第一个值:');
var num2 = prompt('请您输入第二个值:');
var result = parseFloat(num1) + parseFloat(num2);
alert('您的结果是:' + result);
转换为布尔型:
console.log(Boolean('')); // false
console.log(Boolean(0)); // false
console.log(Boolean(NaN)); // false
console.log(Boolean(null)); // false
console.log(Boolean(undefined)); // false
运算符:
- 算数运算符精度问题 浮点数值的最高精度是 17 位小数
// 浮点数 算数运算里面会有问题
console.log(0.1 + 0.2); // 0.30000000000000004
console.log(0.07 * 100); // 7.000000000000001
//我们不能直接拿着浮点数来进行相比较 是否相等
var num = 0.1 + 0.2;
console.log(num == 0.3); // false
- 递增和递减运算符
后置:先原值运算,后自加(先人后己)
前置:先自加,后运算(先已后人)
表达式就有返回结果
var e = 10;
var f = e++ + ++e; // 1. e++ = 10 e = 11 2. e = 12 ++e = 12
console.log(f); // 22
// 后置自增 先表达式返回原值 后面变量再自加1
-
比较运算符
==
判断两边值是否相等,此时有隐式转换
===
判断两边的值和数据类型是否完全相同 -
逻辑运算符
短路运算:当有多个表达式(值)时,左边的表达式值可以确定结果时,就不再继续运算右边的表达式的值;
逻辑与: 语法: 表达式1 && 表达式2
如果第一个表达式的值为真,则返回表达式2
如果第一个表达式的值为假,则返回表达式1
css console.log( 123 && 456 ); // 456
console.log( 0 && 456 ); // 0
逻辑或:语法: 表达式1 || 表达式2
如果第一个表达式的值为真,则返回表达式1
如果第一个表达式的值为假,则返回表达式2
console.log(123 || 456); // 123
console.log(0 || 456 || 456 + 123); // 456
-
赋值运算符
var age = 10;
age += 5; // 相当于 age = age + 5;
age -= 5; // 相当于 age = age - 5;
age *= 10; // 相当于 age = age * 10;
- 运算符优先级
一元运算符里面的逻辑非优先级很高
逻辑与比逻辑或优先级高
流程控制:
顺序执行、条件执行(if,三元表达式,switch)、循环执行(for,while,do-while)
{条件执行
三元表达式 :表达式1 ? 表达式2 : 表达式3;
如果表达式1为 true ,则返回表达式2的值,如果表达式1为 false,则返回表达式3的值
简单理解: 就类似于 if else (双分支) 的简写。
switch表达式:执行case 里面的语句时,如果没有break,则继续执行下一个case里面的语句。
一般情况下,if…else…与switch…case它们两个语句可以相互替换: switch…case 语句通常处理
case为比较确定值的情况, 而 if…else…语句更加灵活,常用于范围判断(大于、等于某个范围) switch
语句进行条件判断后直接执行到程序的条件语句,效率更高。而if…else 语句有几种条件,就得判断多少次。 当分支比较少时,if…
else语句的执行效率比 switch语句高。 当分支比较多时,switch语句的执行效率比较高,而且结构更清晰。
}
{循环执行
(双重)for循环
//打印n行n列⭐
var r = prompt('行数:');
var c = prompt('列数:');
var str = '';
for(var i = 1;i <= r;i++){
for(var j = 1;j <= c;j++){
str = str + '⭐';
}
str += '\n';
}
console.log(str);
var str = '';
for (var i = 1; i <= 10; i++) { // 外层循环控制行数
for (var j = i; j <= 10; j++) { // 里层循环打印的个数不一样 j = i
str = str + '★';
}
str += '\n';
}
console.log(str);
// 九九乘法表
// 一共有9行,但是每行的个数不一样,因此需要用到双重 for 循环
// 外层的 for 循环控制行数 i ,循环9次 ,可以打印 9 行
// 内层的 for 循环控制每行公式 j
// 核心算法:每一行 公式的个数正好和行数一致, j <= i;
// 每行打印完毕,都需要重新换一行
var str = '';
for (var i = 1; i <= 9; i++) { // 外层循环控制行数
for (var j = 1; j <= i; j++) { // 里层循环控制每一行的个数 j <= i
// 1 × 2 = 2
// str = str + '★';
str += j + '×' + i + '=' + i * j + '\t';
}
str += '\n';
}
console.log(str);
while 循环和 for 循环的不同之处在于 while 循环可以做较为复杂的条件判断,比如判断用户名和密码
(do)while循环
// while循环案例
// 1. 打印人的一生,从1岁到100岁
var i = 1;
while (i <= 100) {
console.log('这个人今年' + i + '岁了');
i++;
}
// 2. 计算 1 ~ 100 之间所有整数的和
var sum = 0;
var j = 1;
while (j <= 100) {
sum += j;
j++
}
console.log(sum);
// 3. 弹出一个提示框, 你爱我吗? 如果输入我爱你,就提示结束,否则,一直询问。
var message = prompt('张欣尧你娶我吗');
while (message !== '娶') {
message = prompt('张欣尧你娶我吗');
}
alert('I Do!!!');
// do while循环案例
// 1. 打印人的一生,从1岁到100岁
var i = 1;
do {
console.log('这个人今年' + i + '岁了');
i++;
} while (i <= 100)
// 2. 计算 1 ~ 100 之间所有整数的和
var sum = 0;
var j = 1;
do {
sum += j;
j++;
} while (j <= 100)
console.log(sum);
// 3. 弹出一个提示框, 你爱我吗? 如果输入我爱你,就提示结束,否则,一直询问。
do {
var message = prompt('张欣尧你娶我吗?');
} while (message !== '娶')
alert('我好爱你啊');
continue 关键字 退出本次(当前次的循环) 继续执行剩余次数循环;
break 关键字用于立即跳出整个循环(循环结束)。
}
命名规范:
变量、函数的命名必须要有意义
变量的名称一般用名词
函数的名称一般用动词