JS基础知识备忘录

作者: 乘风御上者 分类: PHP 发布时间: 2019-11-03 20:27
一、 JavaScript语言的核心部分
二、 浏览器接口部分(BOM对象)
三、 页面接口部分(DOM对象-文档对象模型)

一、 JavaScript语言的核心部分

1.全局属性/函数: 全局就表示不是任何对象的东西,可直接调用。(区分BOM中的windows对象)
//全局属性
undefined: 指示未定义的值。
Infinity: 代表正的无穷大的数值。
NaN: 指示某个值是不是数字值。
//全局函数
isNaN(): 检验一个值是否是非数字的值。
isFinite(): 检验一个值是否是无穷大的数字。
eval(): 计算某个字符串,并执行其中的的 JavaScript 代码。
parseInt(): 尝试着将一个字符串转换成整数。
parseFloat(): 尝试着将一个字符串转换成浮点数。
escape(): 对字符串进行编码,这样就可以在所有的计算机上读取该字符串。
unescape(): 对通过escape()编码的字符串进行解码。
encodeURI(): 把字符串作为URI进行编码。
encodeURIComponent(): 把字符串作为URI组件进行编码。
decodeURI(): 对encodeURI()函数编码过的URI进行解码。
decodeURIComponent(): 对encodeURIComponent()函数编码的URI进行解码。
//#以下全局函数比较特殊,他们是js内置对象的构造函数。(区别加new时的调用)
Date(): 返回当天的日期和时间。
实例化.setDate(实例化.getDate() + 3): 这样则实例的日期加三天。其他同理
String(): 把对象的值转换为字符串。
Number(): 把对象的值转换为数字。
Boolean(): 把参数转换成一个原始的布尔值。
this四种情况下不能直接使用: 行间、嵌套、定时器、绑定
函数原体: 函数三种调用方式
1、函数()
2、函数.call(指定对象,函参一,参二…)
3、函数.apply(指定对象,[参一,参二…])
参一可指定此函数内使用this的指向对象,call与apply不同在第二参。
对象的原型
1、 通过字面量创建的对象,原型是Object.prototype。(例子:var obj = {})
2、 通过Object.create()创建的对象,原型指向其参数。(如参数是null,则没有原型)
Object.getPrototypeOf(对象): 查看对象的原型。
原型对象p.isPrototypeOf(对象o): 检测p对象是否是o对象的原型对象。
对象属性的属性描述: 有四个描述符。(属性描述是个对象,每个描述符是一个属性)
value: 属性值
writable: 是否可写
enumerable: 是否可枚举
configurable: 是否可配置
Object.getOwnPropertyDescriptor(对象,'属性'):获取对象的属性描述。
Object.defineProperty(对象,'属性',{四个描述符}): 设置属性的属性描述。(四个默认是:value:undefined、另三个是false)
Object.defineProperties(对象,{属性:{四个描述符},…}): 设置属性的属性描述。(不同以上,可设置多个属性的属性描述符)
对象属性遍历
for/in: 遍历对象属性。(可遍历所有自身及继承的可枚举属性)
Object.keys(对象): 返回对象中可枚举的所有自身属性组成的数组。(注意是自身的可枚举的属性)
Object.getOwnPropertyNames(对象): 返回对象所有自身属性组成的数组。(包括自身可枚举属性)
对象属性检测
'属性' in 对象: 检测属性是否是对象的属性。(继承的也返回TRUE)
对象.hasOwnProperty('属性'): 检测属性是否是对象的自身属性。(不是继承而来)
对象.propertyIsEnumerable('属性'): 检测属性是否是对象的自身属性,并且属性是可枚举的。
对象的存取器属性: 对象的每个属性可由一个存属性(set)+一个取属性(get)所代替。
对象属性被存取器属性代替后
获取对象属性时,调用对应的get 属性(){}
设置对象属性时,调用对应的set 属性(){}
注意:get与set不一定都定义。(例子:只定义get后则属性值不可设置)
定义存取器属性后,再次获取此属性的描述符就变成了get、set、enumerable、configurable
对象的扩展性
Object.preventExtensions(对象): 将对象改成不可扩展的。(只是对象自身属性不可扩展)
Object.seal(对象): 封闭对象属性(除了将对象改成不可扩展,还将自身属性改为不可配置)
Object.isSealed(对象): 检测对象是否封闭。
Object.freeze(对象): 冻结对象属性。(更严格的锁定对象)
Object.isFrozen(对象): 检测对象是否冻结。

二、 浏览器接口部分(BOM对象)

//浏览器宽和高
var w = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
var h = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
事件: IE与FF兼容方法:var evt = event || 回调函数的参数;
阻止事件冒泡:
evt.cancelBubble = true; (可通用的IE方式,非标准)
evt.stopPropagation(): 标准阻止冒泡
网页隐藏在浏览器上的高度与宽度:
document.documentElement.scrollTop : 谷歌浏览器不识别
document.body.scrollTop: 谷歌
鼠标事件: evt.clientX、evt.clientY
键盘事件: evt.keyCode
Cookie:
document.cookie='名称=值;expires=时间': expires为此值的到期时间。

三、 页面接口部分(DOM对象-文档对象模型)

获取元素:
document.getElementById(ID): 根据id获取元素
document.getElementsByTagName(标签名): 获取所有元素,document可换成小范围节点对象。
childNodes: 获取所有子节点(数组形式)兼容性不好,标签之间的空白也算作一个子节点
children: 获取子节点(只是标签节点)
firstChild/firstElementChild: (IE/FF)第一个子节点
lastChild/lastElementChild: (IE/FF)最后一个子节点
nextSibling/nextElementSibling: (IE/FF)下一个节点
previousSibling/previousElementSibiling: (IE/FF)上一个节点
parentNode: 父节点
offsetParent: 相对的父节点
/**
 * 获取所有类元素
 * @param  {[type]} oParent [class所在的父元素对象]
 * @param  {[type]} sClass  [class名]
 * @return {[type]}         [所有class组成的数组]
 */ 
function getClass(oParent, sClass){
    var aElement = getElementsByTagName('');
    var aRes = [];
    for(var i = 0; i < aElement.length; i++){
      if(aElement[i].className == sClass){
        aRes.push(aElement[i]);
      }
    }
    return aRes;
}
创建删除节点:
document.createElement(标签名): 创建标签
document.createTextNode(文本): 创建文本节点
document.createDocumentFragment(): 创建碎片(将创建的所有子节点追加到碎片中,最后再将此碎片加入父节点中) 效率并不高
父节点.appendChild(创建的节点): 追加子节点
父节点.insertBefore(创建的节点, 插入此节点之前): 追加子节点到指定的节点前面
父节点.removeChild(节点): 删除子节点
父节点.replaceChild(新节点,旧节点): 替换节点
节点.innerHTML: 获取节点中所有内容
节点.nodeName: 获取节点名字
节点.nodeValue: 获取节点的值(不同节点值不定)
节点.nodeType: 获取节点属性
节点.className: 获取节点class名
节点属性有:
1: 文本节点
3: 标签节点
节点属性:
setAttribute(名称,值): 设置标签的属性值
getAttribute(名称): 获取标签的属性值
removeAttribute(名称): 删除标签的属性值
节点样式:(获取样式宽高左右等距离值后面有单位px,同样赋值也必须带单位px)
节点.style[样式名]: 获取节点样式。只能获取写到标签中的样式
样式名: 类似backgroundColor,必须是最细分样式
节点.currentStyle[样式]: IE下获取作用到改节点的样式,所有样式
getComputedStyle(节点,false)[样式]: FF下获取作用到改节点的样式,所有样式
综合考虑则是:
/**
 * 获取元素样式
 * @param  {[type]} obj   [节点对象]
 * @param  {[type]} style [样式]必须是最细分样式(例background不行-必须backgroundColor)
 * @return {[type]}       [值]
 */
function getStyle(obj, style){
  if(obj.currentStyle){
    return obj.currentStyle[style];
  }else{
    return getComputedStyle(obj, false)[style];
  }
}
表格有几个固定值: thead,tfoot,tbodies[],rows[],cells[]可快速选取
非标准但基本通用: 只读属性且不带单位px
offsetWidth: 节点的宽度(padding+border+内宽)
offsetHeight: 节点的高度(padding+border+内高)
offsetLeft: 相对与有定位属性的父元素的左边距离
offsetTop: 相对与有定位属性的父元素的左边距离
字符操作:
字符串.indexOf(查找字符): 返回查找字符第一次出现位置
字符串.lastIndexOf(查找字符): 返回字符最后一次出现位置
字符串.search(查找字符): 返回查找字符第一次出现位置,并支持正则
字符串.match(正则): 返回正则匹配到的所有内容的数组
字符串.replace(查找,替换成的字符串): 替换一次
字符串.charAt(下标): 返回下标所在位置字符
字符串.charCodeAt(下标): 返回下标所在位置字符的ASCII码
String.fromCharCode(数字): 将数字转换成相应的ASCII码
字符串1.localeCompare(字符串2): 本地化比较字符1与字符2,1比2大则1,例汉字首字母后面的大
字符串.slice(开始下标[,结束下标]): 截取一段字符串,结束下标位置字符不取,且负数从后开始计算
字符串.substring(开始下标[,结束下标]): 截取一段字符串,结束下标位置字符不取,且负数算作0
字符串.substr(开始下标[,结束下标]): 截取一段字符串,结束下标位置字符也算,且负数算作0
字符串.split(分割符): 将字符串分成数组
字符串.toLowerCase(): 全小写
字符串.toUpperCase(): 全大写
字符串.split():
数组.sort(): 排序.参数为回调函数并且有两个参数,比较两个参数大小,将数组两个元素传进去比较
事件:
元素对象.addEventListener(事件名,函数,false): 添加事件
元素对象.removeEventListener(): 删除事件
IE9之前: 元素对象.attachEvent(on事件名, 函数):
元素对象.detachEvent()

个人简单笔记,学习JS最好还是阮一峰的 JavaScript 教程

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

发表回复