有关弱类型意识、DOM、动态语言与函数式编程
一、弱类型意识
js变量是没有类型的
var a =1; //a 就是一个变量 不要提类型
变量可以赋予任何类型的值,类型仅仅是值得性质 与变量无关
js 的基本类型
变量未赋值时,其值为undefined
只有一个number类型表示数字,不区分整数还是小数
二、动态语言
动态语言针对不是变量,而是值!尤其是对象!
Var obj = {name:”yang”,age:3};
//对象字面量
=后面的值是什么类型?
此时别提什么是弱类型,因为弱类型是针对变量的,此处问的是值是什么类型!
JS是动态语言,可以随意创建对象,而不需要有与之对应的类!
JS中没有类的概念(class)(ES6中新增加了class,但它实际上与java中的class是不一样的)
动态语言不仅可以随意创建对象,而且可以
随意向对象添加属性、方法等成员
向对象删除属性、方法等成员
这个特性对应java来说是不可想象的
三、函数式编程
函数(方法)
可以作为参数传递给另一个函数 【函数也是值】
函数名实际上也是一个普通变量
普通变量也可以赋一个函数作为值
函数实际上是一个对象,这个对象中包含了它的源代码
函数名、以及调用这个源代码的方法
function add(a,b){
return a + b
}
add是变量吗? 是
函数是个对象吗? 是,函数是一个特殊的对象
原型
原型存在的原因是因为JS中没有class,无法共享方法及静态成员
原型是一个容器(对象)可以存放被大量对象共享的方法及属性
JS定义了一条寻找属性/方法的规则:
先在对象本身上找,找到就使用,找不到就去原型中找,
原型中找不到就去原型的原型中找
...........
直到穷尽所有的原型为止(原型链)
DOM
Document Object Model 文档对象模型
实际就是给网页上的标签建立的模型,每一个都用一个对象来表示
每一个标签都是一个类
给网页上标签建模的目的是为了让JS能够以编程的方式控制、生成网页!
DOM是控制网页的API
第一类API:获取标签对象
document.getElementById(“id”);
document.getElementsByTagName(“tagName”);
document.getElementsByName(“name”);
document.getElementsByClassName(“className”);
H5时代新增的2个方法
document.querySelector(CSS筛选器); 返回一个标签
document.querySelectorAll(CSS筛选器);
返回找到的所有标签
第二类API:操作标签的属性
tag.属性名 =
值;
Var value = tag.属性名;
tag.setAttribute(属性名,值);
var value = tag.getAttribute(属性名);
第三类API:控制标签的样式
tag.style.color=’red’;
tag.style.fontSize = ‘12px’;
错误写法: tag.style.font-size
tag.style[‘font-size’] = ‘12px’
样式类
tag.classList.add(“样式类1”); 往上加
tag.classList.remove(“”) 去掉
tag.classList.toggle(“”) 没有就加上,有的话就去掉
tag.classList.contains(“”) 判断是否还有指定的样式类
第四类API:创建、添加、删除标签对象操作
var tag = document.createElement(标签名)
tag.属性名 =
值;
tag.setAttrribute(属性名,值);
parentTag.appendChild(tag); 追加到父标签中
tag.insertBefore();
tag.insertAdjecentElement(‘4种位置’, newTag);
tag.insertAdjecentHTML(‘4种位置’, html字符串);
tag.insertAdjectentText(‘4种位置’,文本字符串);
tag.remove();
第五类API:标签之间的关系
tag.parentNode 上级标签
tag.children 下级标签
tag.childNodes 下级节点
tag.previousSibling 前面的兄弟标签
tag.nextSibling 后面的兄弟标签
第六类API:监听事件
鼠标事件
click(单击) dblclick(双击) context(右击)
mouseover(在上面) mouseout(不在上面)
mouseenter(出进) mouseleave(离开)
mousemove(移动) mousewheel(滚动)
衍生出的拖拽事件:drag dragstart dragenter dragleave drop
衍生出的触控事件:touchstart touchend touchleave
键盘事件
keyup(按键弹起) keydown(按下不放手会连续触发) keypress
窗口事件
resize close
打印相关事件、动画相关事件等
事件对象:当事件发生时浏览器会生成一个事件对象,将事件相关的数据都放到这个对象中,如哪个标签触发了事件
,事件发生时,鼠标的坐标位置,键盘按键的状态(ctrl、shift等是否按下,按下了哪个键)
监听事件:
tag.on 事件名 = function(){
事件发生时会执行函数
}
//只能挂接一个监听函数
tag.addEventListener(‘事件名’,function(){
})
//可以为一个事件挂接多个个监听函数、
tag.removeEventListener(‘事件名’)
有关弱类型意识、DOM、动态语言与函数式编程的更多相关文章
- python 动态语言和协议编程
动态语言:不需要去定义变量的类型 协议编程:一个类实现了某个魔法函数,这个类就是什么类型,理解为协议
- CTF中常见的 PHP 弱类型漏洞总结
作者:ZERO 所属团队:Arctic Shell 参考资料: http://archimesan.me/2017/12/21/php%E5%BC%B1%E7%B1%BB%E5%9E%8B%E6 ...
- Python 到底是强类型语言,还是弱类型语言?
0.前言 我在上一篇文章中分析了 为什么 Python 没有 void 类型 的话题,在文章发布后,有读者跟我讨论起了另一个关于类型的问题,但是,我们很快就出现了重大分歧. 我们主要的分歧就在于:Py ...
- PHP 是一门弱类型语言
PHP 是一门弱类型语言 我们注意到,不必向 PHP 声明该变量的数据类型. PHP 会根据变量的值,自动把变量转换为正确的数据类型. 在强类型的编程语言中,我们必须在使用变量前先声明(定义)变量的类 ...
- [py]python多态-动态语言的鸭子类型
弱类型?强类型?动态语言,静态语言 弱类型: 在程序运行过程中,类型可变 还有一种说法: 动态 variables must necessarily be defined before they ar ...
- 是否含有RTTI(运行时类型信息)是动态语言与静态语言的主要区别
运行时类型信息代表类型信息和对内存的操作能力. 运行时类型信息是运行时系统的基础. 类型信息分为编译时类型信息和运行时类型信息两种: 静态语言的类型信息只在编译时使用和保留,在可执行文件中没有类型信息 ...
- 解释型vs编译型 动态vs静态 强类型vs弱类型
------------------------------------------------------------ 释型.动态语言与静态语言.强类型语言与弱类型语言的区别 编译型和解释型 我们先 ...
- python是强类型还是弱类型语言
几句话了解python特性 Python 是强类型的动态脚本语言 好多人对python到底是强语言类型还是弱语言类型存在误解,其实,是否是强类型语言只需要一句话就可以判别, 强类型:不允许不同类型相加 ...
- Python 语言特性:编译+解释、动态类型语言、动态语言
1. 解释性语言和编译性语言 1.1 定义 1.2 Python 属于编译型还是解释型? 1.3 收获 2. 动态类型语言 2.1 定义 2.2 比较 2. 动态语言(动态编程语言) 3.1 定义 3 ...
随机推荐
- Object-C中的数字对象
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { ...
- COM方式实现C++调用C#代码的一些总结
首先这个测试没成功,只在本机上可行,在不同机器上测试失败.可能是GUID不对或者没注册成功. 既然已经花了一上午时间去研究,还是总结一下 1.网上说要创建一个snk证书,但不创建也可以.只不过不能放入 ...
- Atitit.编程语言的主要的种类and趋势 逻辑式语言..函数式语言...命令式语言
Atitit.编程语言的主要的种类and趋势 逻辑式语言..函数式语言...命令式语言 1. 编程语言的主要的种类 逻辑式语言..函数式语言...命令式语言 1 2. 逻辑式语言,,不必考虑实现过程而 ...
- Android从无知到有知——NO.5
今天整一下利用广播实现ip拨号. 这一块主要用到的知识是android四大组件之中的一个的broadcast receiver(广播接收者).那么它接收什么东东呢,就是我们所无谓的一个个的事件,比 ...
- error: invalid use of incomplete type
一般出现这种情况都是没有将用到的头文件包含进来 我的情况是在头文件中定义了一个QMenu的指针,在源文件中使用menuBar()函数来返回一个menu指针.我在源文件中包含了文件<QtGui&g ...
- Django QuerySet 方法梳理 。model外键 多对多的保存
引用:https://feifeiyum.github.io/2017/03/28/python-django-queryset/ 说明 Models 层是 Django 框架中最强大的部分之一, 大 ...
- JAVA第一个窗体小程序
import java.awt.*;public class Day1015_Frame{ public static void main(String[] args) { ...
- JS学习笔记(5)--一道返回整数数组的面试题(经验之谈)
说明: 1. 微信文章里看到的,作者是马超 网易高级前端技术经理,原文在网上搜不到,微信里可以搜“为什么你的前端工作经验不值钱?”,里面写着“转载自网易实践者社区”.(妈蛋,第二天网上就有了http: ...
- 基于 jQuery支持移动触摸设备的Lightbox插件
Swipebox是一款支持桌面.移动触摸手机和平板电脑的jquery Lightbox插件.该lightbox插件支持手机的触摸手势,支持桌面电脑的键盘导航,并且支持视频的播放. 在线预览 源码下 ...
- Can't zip RDDs with unequal numbers of partitions
java.lang.IllegalArgumentException: Can't zip RDDs with unequal numbers of partitions //如果两个RDD分区数不同 ...