JavaScript入门
一、js如何使用
<script>
</script>
以上标签可以放在页面的任何位置,且可放多个。
1.页面内置js
<script type="text/javascript">
document.write("hello world!");
</script>
2.外部js文件
<script type="text/javascript" src="./demo.js">
document.write("hello world!");
</script>
在js文件夹下创建demo.js文件有以下内容
document.write("hello world!");
对于两种方式的选择
- 推荐使用第二中使用js的方式,因为在正常使用规范下,建议结构、行为、样式相分离,即html、js、css相分离。
- 两种方式不能同时使用,否则会以第二种方式为准
二、JavaScript的基本语法
参考https://www.w3school.com.cn/js/index.asp,在此仅取几点介绍
规范代码格式
<script>
var a = 10,
b = 20,
c;
</script>
变量
- 在JavaScript中,var定义变量,变量的类型由其变量赋的值的类型决定。
原始类型
- Number、String、Boolean、undefined、null
- undefined只有一个值,未定义时会如此显示。
- null 当变量定义后没有赋值的话,会以此占位。
引用类型
var arr1 = [1,2];
var arr2 = arr1;
arr2.push(1);
//此时 arr1 = [1,2,1]; arr2 = [1,2,1]
三、JavaScript错误以及响应
- 低级错误(语法解析错误)
- 逻辑错误
- js语法错误会引发代码终止,但不会影响其他js代码块
- 浏览器在加载某一JavaScript代码块(或者js文件)时,会先整体检查是否由语法错误,即如果存在1类型错误,则会直接报错,该JavaScript代码块(或者js文件)所有语句均不会被执行;此后,则会逐语句检查代码,如果存在2类型错误,则会在逻辑错误出终止,即会执行逻辑错误前语句,报错语句以及其后语句不会被执行。
四、JavaScript运算符
赋值的顺序,由右至左,计算的顺序,由左至右;
优先计算再复制,且排序的时候括号优先。
对于“+”
1. 数字运算,字符串连接
2. 任何类型加上字符串最终结果都会变为字符串。
对于“/”
0/0 为NaN (Not A Number)
4/0 为Infinity (无限的)
-4/0 为-Infinity
- 赋值语句的优先级最低,()的优先级最高
- NaN infinity 都为数字类型
逻辑运算符
逻辑运算符有
- &&(与)
- ||(或)
- !
_其中undefine、null、""、false、0 会为假,其余均为假
对于与或运算符,会存在短路现象,例如
// &&
var a = 1&&6; //此时a的值会为6
//⬆在这里对于如果第一个表达式为真,则会继续判断下一个表达式是否为假,如果下一个表达式后不存在下一个表达式,则以该值作为结果
//依据该短路特性,可以将其作为if语句使用,例如
1>2&&document.write("hello world");
// ||
var b = 0||8; //此时 b的值为0
var b = 7||8; //此时 b的值为7
//与&&相似但与&&机制规则差不多相反,也是具有短路特性,当第一个表达式为真则不会判断下一个表达式,该语句的值为第一个表达式的值,如果第一个为假.则会执行下一个.
//应用
var event= e||window.event;
五、循环语句
可参考https://www.w3school.com.cn/js/js_operators.asp
以下为几个涉及循环语句的题目
- 输入n,求2的n次方阶乘
var n = parseInt(window.prompt('input'));
var count = 1;
while (n--) {
count *= 2;
}
document.write("2的n次方为" + count);
- 输入n,求n!
var n = parseInt(window.prompt('input'));
//n的阶乘
var jiecheng = 1;
for (var i = 0; i < n; i++) {
jiecheng = jiecheng * (i + 1);
}
document.write(jiecheng);
- 输入n,求斐波那契数列第n位
// n 斐波那契数列
var first = 1;
var second = 1;
var k;
if (n == 1 && n == 2)
k = first;
for (var i = 3; i <= n; i++) {
k = first + second;
first = second;
second = k;
}
document.write(k);
- 输入n,反向输出n.例如,输入数字123,反向输出321.
//反向输出
var s = 0;
do {
s = n % 10;
n = n / 10;
n = parseInt(n); //与上一行代码,共同达到n的整除结果
document.write(s);
} while (n > 0);
- 求100以内质数
for (var i = 2; i <= 100; i++) {
var f = true;
for (var j = 2; j < Math.sqrt(i); j++) {
if (i % j == 0) {
j = 100;
f = false;
}
}
if (f) {
document.write(i + " ");
}
}
六、附加:主流浏览器以及其内核
- IE trident
- Chrome webkit/blink
- Firebox gecko
- Opera presto
- Safari webkit