web框架之JavaScript基本使用(python3入门)

1 js引入

<html>
    <body>
    </body>
    <script src="js/xxx.js"></script>
    <script>
        // js代码块
    </script>
</html>
js引入

 

2 js的基本数据类型

// 值类型: number  string  boolean  undefined

// 引用类型: function object(dic)

// 特殊的对象类型: Null Array Date RegExp Math

 

3 js数组与字典操作

// 数组
var arr = [5, 2, 3, 1, 4];
// unshift() | push()
// shift() | pop()
// splice(beginIndex, ctrlCount, newArgs);
// sort()

// 字典
var dic = {
    k1: v1,
    ...
    kn: vn
}
// key一定是字符串类型, value可以为任意类型
// 怎么表示字典成员: dic.key  | dic['key']
// delete dic.key来删除
js数组与字典操作

 

4 js函数

// 1.定义函数 function 函数名(形参列表) { 代码块 }
function fn1() {
    console.log('我是函数fn1');
}
var fn2 = function () {
    console.log('我是函数fn2');
};
// js匿名函数: 只能在定义阶段被调用一次
(function() {
    console.log('我是匿名函数');
})();  // (fn定义)() 第一个()是将定义的fn作为整体拿到内存地址,第二个()是函数的调用

// 2.函数的调用 函数名(实参列表)
fn1();
fn2();

// 3.函数的返回值 js函数有且只有一个返回值
function fn3() {
    // 没有明确返回值返回undefined

    // 空返回返回undefined
    // return;

    // 正常返回一个值
    // return 10;

    // 如果返回多个值, js最终只能返回最后一个值 20
    // return 10, 20;

    // 如何实现返回多个值 借助 数组和字典
    return [10, 20]
}
var res = fn3();
console.log(res);

// 4.函数的参数
// i) 形参与实参个数不需要统一, 但一定按位置传参
function fn4(a, b) {  // 实参少传,就会由形参未被赋值, 实参多传,多传的实参就会被丢弃
    console.log(a, b)
}
fn4(10, 20, 30)

// ii) 带值的形参就是默认值参数,位置随意
function fn5(a, b=10, c, d=20) {  // b有默认值对应在c之前意义不大,原因要给c赋值,一定给b赋值完了
    console.log(a, b, c, d)
}
fn5(100, 200, 300);

// iii) ...args为不定长形参
function fn6(a, ...b) { // 不定长参数有数组存储
    console.log(a, b)
}
fn6({name:'Bob'}, 1, 2, 3, 4, 5)
js函数操作

 

5 js完成页面交互

// 1.通过js选择器获取页面标签对象
// 2.为该对象绑定事件, 当该标签触发该事件时就会调用绑定的函数
// 3.在绑定的函数内部完成指定的业务逻辑
// js完成与页面进行交互, 该js一定要写在body的最下方
// 1.通过js选择器获取页面标签对象
// 永远获取匹配到的第一个标签对象,参数为css语法的选择器
var box = document.querySelector('body .box');
// 永远获取匹配到的所有标签对象(不够有多少个结果一定是数组),参数为css语法的选择器
var boxs = document.querySelectorAll('.box');

console.log(box);
console.log(boxs);
console.log(boxs[1]);

// 2.为目标标签对象(们)绑定交互的方式(事件)
// 3.在事件的内部完成具体交互的业务逻辑
box.onclick = function () {  // 该方法是在box被点击是系统回调, 所有在函数内部拿到this对象一定是box
    console.log('box1被点击了', this);

    // 获取内容
    var msg = this.innerText;
    console.log(msg);
    // 修改内容
    this.innerHTML = "<b>呵呵</b>";
    // 获取样式 getComputedStyle(页面对象, 伪类 没有时用null填充).js语法方式的样式名称
    var fontSize = getComputedStyle(this, null).fontSize;
    console.log(fontSize);
    // 设置样式
    this.style.backgroundColor = "red";
    this.style.marginLeft = '100px';
    // 获取类名
    var className = this.className;
    console.log(className);
    // 设置类名
    this.className += " big";  // 空格不可以省略
}


// boxs[1].onmouseover = function () {
//     console.log('box2被悬浮了')
// }
js完成页面交互

 

6 js流程控制

//1 顺序结构: 代码本质就是顺序结构
//2 分支结构: if家族
//3 循环结构: for , while , do...while
/* py:
if 条件1:
    代码块1
elif 条件2:
    代码块2
else:
    代码块3
 */



/* js:
if(条件){
    代码块1;
}
else if (条件2){
    代码块2;
}
else {
    代码块3;
}
 */
py和js的循环格式比较
var btn = document.querySelector('.btn');
var inp = document.querySelector('.inp');
    btn.onclick = function () {
        //1 如何获取input框中的内容,该标签的value值
        val =inp.value;
        // alert(val);

        //2 将内容转换为数字,转换成功就是数字,失败则是NaN
        num = +val;     //只要不是NaN就是数字 isNaN()
        // alert(num)


        //3 判断弹出结果
        //!就是取反,相当于py中的not
        if (!isNaN(num)){
            alert('是数字');
        }
        else {
            alert("不是数字");
        }

        //4 清空输入框
        inp.value = "";

    }
判断input框输入的是否为数字
//1 js之while循环: 除了可以解决以下两种循环方法(相对复杂),还可以完成不知道循环次数的需求
//循环流程:1 初始化循环变量 2进行变量的判断 3完成业务逻辑 4循环变量增量(234是循环体)
n = 0;
while (n < 5){
    console.log("呵呵");
    n += 1;
}
while循环
//2 js之for循环: 很明确知道循环次数
//循环流程: 1 var i=0 , 2 i<5, 3 console.log 4 i+=1 (1是入口 2是出口,和while一样)
for (var i = 0; i < 5; i += 1){
    console.log("for循环");

}
for循环
//3 js之do...while循环: 在条件判断之前就需要执行一次循环体

count =0;
do {
    console.log("do...while循环")
    count += 1

} while (count < 5)
do...while

 

posted @ 2019-07-28 22:29  名叫蛐蛐的喵  阅读(224)  评论(0编辑  收藏  举报