当前位置: 首页 > news >正文

js入门经典学习小结

 简介

js是解释型语言,虽然名字有java,但和java,c等编译型语言不同,它是解释型的,类似perl,py

历史

90年代最早js 1.0版本是网景navigator2引入的

然后欧洲计算机制造商协会(ECMA)制定ECMASript规范

然后微软开发自己的javascript: jScript

90年代后期网景navigator4和IE4都支持js,但各自的实现方式不同,规范也不同,让开发者感到复杂。然后W3C通过DOM规范各厂商对界面操作的规范

dom

浏览器加载页面,有一个页面结构的内部体系存在内存里,叫DOM,是树形结构,可通过js方便操作dom。

树形结构顶层对象是window对象,它也是全局对象,具有全局作用域,window四个子对象是document, location,history,navigator。html界面都在document对象下,document对象用的也比较多,如果需要对document对象操作,直接执行document.getElementByNames(...),也可以带全局对象操作:window.document.getElementByNames(...)

document有属性document.write('text'),但这个好像会覆盖document下其他元素,不推荐,推荐用dom操作页面对象

如何定义js脚本

两种方法,一种是写到html标签里,一种是写在js文件里,然后在html里用script标签的src属性引入自定义的js文件

// test/test.js
function () {alert('hello world');}
<script>function() {alert('hello world');}</script>
<script src="/test/test.js"></script>

注意,如果用src引入外部js文件,则html的script标签里不能有任何内容

虽然js文件后缀是.js,但浏览器其实可以无视后缀,即你后缀不对但文件内容对也能加载出来

创建简单脚本

思考1 js定义在html还是js脚本

js如果在html定义,放在head还是body?

如果放在body,会解释执行,但是是按顺序的,如果dom没加载出来但js访问了那就会报错,所以如果要定义在body,需要把script放在body末尾

如果放在head,当在body调用时,body肯定都已经加载完了,放在head更易读,也避免了放在body元素未加载完调用js报错问题

思考2 js关于大小写

html不区分大小写 js区分大小写 xhtml区分大小写

注释

单行注释:// this is a note

多行注释: /* this is \n another note */

文件大小

带注释的js文件会稍微大点,一般生产环境部署会压缩js文件,压缩后文件后缀一般是xxx.min.js

关于事件

js用事件处理器处理事件,常见的有onClick,onMouseOver,onMouseOut等,这三个几乎可以用于任何html元素

关于空行

html不会处理空行,除非你用转义字符表示空行

函数

尝试一下

<script>
function buttonReport(buttonId, buttonName, buttonValue) {var a = "button id: " + buttonId + "\n";var b = "button name: " + buttonName + "\n";var c = "button value: " + buttonValue + "\n";alert(a + b + c);
}
</script>
<div class="testb"><input id="abc" name="def" value="ghi" onclick="buttonReport(this.id, this.name, this.value)"/>test</div>

返回值

函数没返回值的话则是undefined

匿名函数

看个例子

<script>
var sayHello = function () {alert("hello world");};
</script>
<div class="testb"><p onclick="sayHello()">test</p></div>

更多函数知识

变量作用域

js有 全局作用域 函数作用域 块级作用域

var可声明全局作用域和函数作用域,块级作用域需要用let声明 块的定义可以理解为一个大括号

函数内部如果调用函数外同名变量,如果没有在函数里重新用var声明,则调用的是全局变量,即函数外的变量,在函数内改变这个变量,外部变量也会改变,因为改的是全局变量,是全局作用域

如果在函数内部用var重新声明了外部同名变量,这时这个变量就是函数作用域的了

用let声明的是块级作用域

this

html标签里调用时使用this,表示调用当前的标签对象,需注意的是this后加的属性需要元素拥有才能调用,否则报错,注意注意在注意

如果在js函数内部调用this,则this表示的是调用这个函数的父对象

const

用const可以声明常量,用const声明的常量,不能修改值,也不能重新用var定义,也不能重新用const定义为其他常量

箭头函数

可以理解为匿名函数的另一种简便写法

var sayHello = () => alert('hello world')

默认参数

默认参数一般放在参数列表的末尾,顺序不能错,类似py

dom对象和内置对象

常见用户交互对象方法

alert 类似py的print

confirm 弹出一个模态框 有ok cancel按钮 文本是confirm传入的参数

var sayHello = () => {confirm('hello world');};

prompt 和confirm类似,弹出一个模态框,有一个输入框,最后的值是你输入的值,还提供第二个参数作为输入框里的默认值

var sayHello = () => {prompt('hello world');};

var sayHello = () => {prompt('hello world', "hello kitty");};

常用元素属性方法

根据id或name访问元素:即document.getElementById 注意该方法和document.getElementsByName的区别,一个获取的是单元素,一个获取的是多元素,多元素拿到要再通过下标访问

interHTML:闭合标签夹着的内容可通过修改元素的interHTML属性来修改实现

window.history

可通过history的方法forward backward go三个方法访问历史url,三个方法执行结果分别为前进,后退,按执行参数前进或后退n个页面

window.location

该属性包含了当前页面url信息

应用:

href可以设为location.href实现访问

location.reload()表示刷新页面

window.navigator

保存浏览器本身数据 这个数据长让人捉摸不透 感觉书里不很建议用这个属性

日期和时间

var abc = new Date();

var year = abc.getFullYear();

var month = abc.getMonth();

var date = abc.getDate();

var day = abc.getDay();

var hour = abc.getHours();

var minutes = abc.getMinutes();

var seconds = abc.getSeconds();

with

类似py,例如调用某个模块(math)的方法,使用with,省去了对模块名的访问

数字和字符串

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Python】PyWebIO 初体验:用 Python 写网页
  • 006 | 资本资产定价模型 (CAPM)
  • MySQL学习(20):InnoDB引擎逻辑架构、物理架构
  • Unity入门2——编辑器常用功能
  • 投资 - 什么叫有资金托底
  • 当node节点kubectl 命令无法连接到 Kubernetes API 服务器
  • k8s创建secret并在container中获取secret
  • Spring框架面试总结
  • java最强本地缓存-Caffeine
  • 「数组」随机快速选择 / LeetCode LCR 076(C++)
  • VMWare虚拟机磁盘扩容
  • 【langchain学习】使用LangChain创建具有上下文感知的问答系统
  • 微服务-分布式事务-seata
  • 神经网络:智能时代的基石
  • 再分享API形式调用Dify项目应用
  • 【node学习】协程
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • jdbc就是这么简单
  • js面向对象
  • PHP面试之三:MySQL数据库
  • Python中eval与exec的使用及区别
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • scrapy学习之路4(itemloder的使用)
  • vue 个人积累(使用工具,组件)
  • vuex 笔记整理
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 机器学习 vs. 深度学习
  • 聚类分析——Kmeans
  • Prometheus VS InfluxDB
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • ​HTTP与HTTPS:网络通信的安全卫士
  • #Lua:Lua调用C++生成的DLL库
  • (4)事件处理——(7)简单事件(Simple events)
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (三十)Flask之wtforms库【剖析源码上篇】
  • (十三)MipMap
  • (十一)图像的罗伯特梯度锐化
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • *1 计算机基础和操作系统基础及几大协议
  • 、写入Shellcode到注册表上线
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .cfg\.dat\.mak(持续补充)
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .Net CoreRabbitMQ消息存储可靠机制
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .net和php怎么连接,php和apache之间如何连接
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • .pub是什么文件_Rust 模块和文件 - 「译」