javascript初学一周学会写购物车底层

这是来自学习js一周的程序员小白的总结 ,跟着一起进步成大神吧
(首先我们要懂js基础概念和基础语法)

javascript-基础部分

1、javascript概述

1.javascript概念:

简称js,是一个运行在js解释器中的一个解释型弱类型面向对象脚本语言

2.js的使用-两种

a.在html中直接写 <`script`> js代码 </script>
b.创建xxx.js文件,js代码书写在js文件中,再在HTML中引入 <`script scr="xxx.js`"></`script`>

3.js的输出-三种

  1. 控制台输出--console.log()----最常用
  2. 警告框输出--alert()---会卡住页面
  3. 页面上输出--docunment.write()---绑定点击事件会清空页面

2、变量和常量

1.变量:

语法:var 变量名=值;
保存一个想要重复使用的值

2.常量:

语法:const 常量名=值;
一旦创建就不允许修改,(一般用不上)

3、算数运算符

( + - * / )跟小时候一样
%:取余(模)最多用于判断奇偶数(%2==0/1)

4、数据类型--5种

String 字符串--页面上获取的都是字符串
Number 数据
Boolean 布尔 (true/false)
Undefined --垃圾,我们不希望见到undefined
Null 空--可以释放内存

5、数据类型的转换

1.隐式转换:--需要多想想

——算数运算都具有隐式转换:
默认:都会转为数字再运算

特殊:

  + 碰上字符串,会进行拼接  
  - * /碰上非纯数字字符串,会变为——NaN  

NaN:

    不是一个数字,但是一个数字类型,--我们也不希望见到他  
    但可以用来判断用户恶意输入(只能判断数字输入)  
    用法:`!isNaN(变量)`->true:是一个有效数字  
                     ->false:NaN  

2.显示转换(强制转换)

1.转字符串
xxx.to string() --没用:页面上获取的一切东西都是字符串

2.转数字
a.parseInt(x),解析为一个整数
b.parseFloat(x),解析为一个小数
原理都是:从左到右依次解析,碰上一个非数字就停止,parseFloat可以解析一个小数点,一来就碰上非数字则为——NaN
c.number(x)--转为数字,同等于隐式转换,没用,不如用(-1,*1 ,/1)

6、函数-function——第一等公民

1.创建:function 函数名(){需要反复执行的代码}

2.调用:
a.程序员调用:直接写在代码里,写一次调一次
语法:函数名()
b.用户调用:绑定上点击事件,用户点几次调几次
语法:<elem onclick=函数名()>``</elem>

3.带参数的函数
创建:function 函数名(形参){}
调用:函数名(实参)

4.使用
a.不希望一打开页面就执行
b.能够反复执行
c.是一个独立功能体
d.可以自动释放变量--最好每个一个功能都封装为一个函数

7、分支结构

1.一个条件一件事,满足就做,不满足就不做
if(条件){}

2.一个条件两件事,满足就做,不满足就做另一件
if(条件){}else{}

3.多个条件多件事,满足谁就做谁

if(条件1){
操作1
}else if(条件2){
操作2
}else{
默认操作
}

8、循环结构

1.while循坏 ——不明确循坏次数——死循环用这个

var 循环变量=值;
while(循坏条件){
循环体;
循环变量的变化;
}

死循环:
while(true){
循环体
}
搭配循环退出——break使用

2.for循坏——语法更简单,大多数用这个

for(循环变量;循环条件;循坏条件的变化){
循环体;
}

9、数组

希望一个变量能保存多个数据

1.创建 var arr=[];
2.访问 arr[下标];
3.添加/覆盖 arr[下标]="值";

4.数据三大不限制
a.数据类型不限制
b.长度不限制
c.下标越界不限制--不好
添加时,下标越界会造成稀疏数组,遍历时拿到很多undefined
访问时,下标越界会得到undefined

5.数组的唯一属性——length(长度)
数组.length
三个固定套路:
a.始终给末尾添加元素arr[arr.length]="新值"
b.获取倒数第n个元素arr[arr.length-n]
c.缩容arr.length-=n

6.遍历数组 for(var i=0;i<arr.length;i++){ arr[i] }

1、 js三部分

1.es3/es5/es6——核心语法
2.DOM docunment object model——文档对象模型--操作HTML文档
3.BOM 浏览器对象模型--操作浏览器

2、 DOM概述

1.docunment object model——文档对象模型--操作HTML文档
2.dom树:每个页面都是一个倒挂的树状结构
树根:document

3、查找元素

1.通过ID查找
document.getElementById("id名") 找到返回单个元素,没找到返回null,一般不用,留给后端

2.通过标签名查找
document/已找到的父元素.getElementByTagName("标签名")
找到返回集合,没找到返回空集合
要么通过遍历拿到全部,要么通过下标拿到一个

3.通过class名查找 document/已找到的父元素.getElementByClassName("标签名")
找到返回集合,没找到返回空集合
要么通过遍历拿到全部,要么通过下标拿到一个

4.通过关系查找
elem.parentNode--找父元素
elem.children--找子元素们
elem.lastElementChild--最后一个儿子
elem.firstElementChild--第一个儿子
elem.previousElementSibling--找上一个兄弟
elem.nextElementSibling--找下一个兄弟

4、操作元素

一切获取都是为了判断, 一切设置都是为了修改

1.操作内容
获取:elem.innerHtml(认识标签)/elem.innerTEXT
赋值:elem.innerHtml="新值"

2.操作属性
获取:elem.getAttribute("属性名")/elem.属性名(不认识自定义属性,但更简洁)
赋值:elem.setAttribute("属性名","属性值")/elem.属性名="属性值"

3.操作样式
操作的是内联样式
获取:elem.style.css属性名
赋值:elem.style.css属性名="属性值"

5、绑定元素

1.单个元素:

	elem.onclick=function(){
		this->就是绑定事件的这个元素
	} 
            

2.多个元素:

	for(var i=0;i<elems.length;i++){
		elems[i].onclick=function(){
			this->是当前触发事件的元素
		}
	}


购物车案例(基本用上上面所有语法内容)

<body>
<!-- html部分 -->
    <table id="tbl">
        <thead></thead>
        <tbody>
            <tr>
                <td>iphone6</td>
                <td>4488</td>
                <td>
                    <button>-</button>
                    <span>1</span>
                    <button>+</button>
                </td>
                <td>4488</td>
            </tr>
            <tr>
                <td>iphone7</td>
                <td>5488</td>
                <td>
                    <button>-</button>
                    <span>1</span>
                    <button>+</button>
                </td>
                <td>5488</td>
            </tr>
            <tr>
                <td>iphone8</td>
                <td>6488</td>
                <td>
                    <button>-</button>
                    <span>1</span>
                    <button>+</button>
                </td>
                <td>6488</td>
            </tr>
            <tr>
                <td>RTX 3090</td>
                <td>20000</td>
                <td>
                    <button>-</button>
                    <span>1</span>
                    <button>+</button>
                </td>
                <td>20000</td>
            </tr>
            <tr>
                <td>RTX 3080</td>
                <td>16000</td>
                <td>
                    <button>-</button>
                    <span>1</span>
                    <button>+</button>
                </td>
                <td>16000</td>
            </tr>
        </tbody>
        <tfoot>
            <tr>
                <td colspan="3">总计:</td>
                <td id="total">0</td>
            </tr>
        </tfoot>
    </table>
    
<!-- js部分 -->
    <script type="text/javascript">
        var btns = document.getElementsByTagName("button");
        for (var i = 0; i < btns.length; i++) {
            btns[i].onclick = function () {
                if (this.innerHTML == "+") {
                    calc(1, this);
                } else {
                    calc(-1, this);
                }
                getTotal();
            }
        }
        getTotal();
        
        function calc(num, btn) {
            if (num == 1) {
                var span = btn.previousElementSibling;

            } else {
                var span = btn.nextElementSibling;

            }
            var spanv = parseFloat(span.innerHTML) + num;

            if (spanv > 0) {
                span.innerHTML = spanv;
                var price = btn.parentNode.previousElementSibling.innerHTML;
                btn.parentNode.nextElementSibling.innerHTML = price * spanv;
            }
        }

        function getTotal() {
            var tbody = document.getElementsByTagName("tbody")[0];
            var trs = tbody.children;
            for (var i = 0, money = 0; i < trs.length; i++) {
                money += parseInt(trs[i].lastElementChild.innerHTML);
            }
            total.innerHTML = money;
        }
    </script>

</body>