聊聊原生JS的那些事儿(常用JavaScript基础简单总结)

聊聊原生JS的那些事儿(常用JavaScript基础简单总结)

前言

首先,什么是原生JS?之前听过很多入门新手都乱不清这个说法。所谓的“原生JS”,只是国人对JavaScript基础(遵循ECMAscript标准)的一种叫法,原生态JavaScript,不依赖任何类库,不适用任何框架,纯粹是原原本本的JavaScript代码。从本质上讲,JavaScript本身就存在一些自己的类库,并且非常强大!

我们常用的“jqurey”就是原生JavaScript的集成框架或插件之一,它对原生js支持比较友好。使用框架编写的JavaScript代码,其实并不是你写的,你只是用了别人集成的工具函数进行总结整理出来的,哈哈!

原生JS由三部分组成:ECMAscript标准(核心)、文档对象模型(DOM)、浏览器对象模型(BOM),本文就JavaScript常用基础做了简单总结:

Document 文档对象模型(DOM)

1、获取DOM元素

// 通过Id属性获取

console.log(document.getElementById('id'));

// 通过ClassName(类名)属性获取

console.log(document.getElementsByClassName('class'));

// 通过TagName(标签)属性获取

console.log(document.getElementsByTagName('div'));

// 通过Name属性获取

console.log(document.getElementsByName('name'));

2、类名操作(Class)

className属性操作

document.getElementById('id').className,该属性内容会直接改变dom元素上class的值;

console.log(document.getElementById('id').className);

// 设置类名

document.getElementById('id').className='myclass';

// 设置多个类名,中间用空格隔开

document.getElementById('id').className='myclass1 myclass2';

// 清空类名,设置为空

document.getElementById('id').className='';

classList属性操作

document.getElementById('id').classList,使用classList会优于使用className,但是classList中的add()和remove()均只能进行单一操作,也就是说不能同时新增或者删除多个类名;

// 获取类名返回一个数组

console.log(document.getElementById('id').classList);

// 获取类名数组长度(类名的个数)

console.log(document.getElementById('id').classList.length);

// 判断是否存在该class

document.getElementById('id').classList.contains('oldClass');

// 添加class,在class属性新增,并不是直接替换

document.getElementById('id').classList.add('newClass');

// 移除class

document.getElementById('id').classList.remove('oldClass');

// 切换class,有则移除,没有则添加

document.getElementById('id').classList.toggle('newClass');

3、节点操作(Node)

// (1)、获取节点列表(查找)querySelectorAll

var myNodeList = document.querySelectorAll("div");

console.log(myNodeList); // 返回一个节点数组(body下面所有的div元素)

// (2)、修改样式:所有的div元素背景颜色设置为红色

var myNodelist = document.querySelectorAll("div");

for (var i = 0; i < myNodelist.length; i++) {

myNodelist[i].style.backgroundColor = "red";

}

// (3)、修改节点文本 innerHTML

document.getElementById('id').innerHTML = 'Hello world!';

// (4)、修改节点元素样式 style

document.getElementById('id').style.display = 'none';

// (5)、在body中创建节点并在其中添加文本 appendChild 尾部添加

var newdiv = document.createElement('div'); // 创建元素节点

var newtext = document.createTextNode('Hello world!'); // 创建文本节点

newdiv.appendChild(newtext);

document.body.appendChild(newdiv);

// (6)、插入节点:将新元素添加到开始位置 insertBefore 起始位置添加

var node = document.getElementById("id");

var child = document.getElementById("p1");

node.insertBefore(child);

// (7)、获取子节点列表 childNodes

var element = document.getElementById('id');

var childNodes = element.childNodes;

// (8)、删除子节点(只能是父级删子级)removeChild

element.removeChild(childNodes[0]);

// (9)、替换子节点 replaceChild

var para = document.createElement("p");

var text = document.createTextNode("新建文本");

para.appendChild(text);

var parent = document.getElementById("id");

var child = document.getElementById("p1");

parent.replaceChild(para,child);

提示: 对于本章节想具体深入详情了解、学习可参考菜鸟教程[DOM 教程]

ECMAscript 语法基础

1、JavaScript 数据类型

基本类型(值类型)

字符串(String);

数字(Number);

布尔(Boolean);

为空(Null);

未定义(Undefined)

// 字符串

var str = "string";

console.log(str); // string

// 数字

var num = 123;

console.log(num); // 123

console.log(Number(str)); // NaN

console.log(String(str)); // 123

// 布尔值

var x = true;

var y = false;

console.log(x); // true 真值

console.log(y); // false 假值

// 空值:null 是js中的关键字,表示空值

var data = null;

console.log(data);

// 未定义:undefined不是js中的关键字,它是一个全局变量,undefined是从null中派生出来的,它类似于NaN、Infinity一样,一般定为只读(es5修正),在初始赋值是不推荐此类型赋值。

var data = undefined;

var obj = {};

console.log(data); // undefined

console.log(obj.item); // undefined

注: ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。

引用数据类型

对象(Object);

var obj = new Object();

数组(Array);

var obj = new Array();

函数(Function);

var obj = function(){};

2、实例对象

Object对象

// Object实例对象

var obj = new Object();

console.log(typeof(obj)); // object

console.log(Object.prototype); // 返回 Object 原型对象

obj.x='123';

obj['y']='123';

console.log(obj.valueOf()); // {x: '123', y: '123'} 返回对象本身

console.log(obj.toString()); // [object Object] 字符串形式

console.log(obj.hasOwnProperty('x')); // true 判断当前对象是否存在某个属性

console.log(obj.propertyIsEnumerable('x')); // true 判断当前对象的某个属性是否可枚举

Array对象

// Array实例对象(数组)

var arr = new Array();

console.log(typeof(arr)); // object

console.log(Array.isArray(arr)); // true 判断实例对象是否为数组

console.log(arr.length); // 0 判断数组长度

arr.push('123'); // 在数组末端添加一个元素

arr.push('aa','abc'); // 在数组末端添加多个元素

arr.unshift('567'); // 在数组首位添加一个元素

arr.unshift('890','efg'); // 在数组首位添加多个元素

console.log(arr.valueOf()); // ['890', 'efg', '567', '123', 'aa', 'abc'] 返回数组本身

arr.shift(); // 从删除数组的第一个一个元素,并返回该元素

console.log(arr.valueOf()); // ['efg', '567', '123', 'aa', 'abc']

arr.pop(); // 从数组末尾删除一个元素,并返回该元素

console.log(arr.valueOf()); // ['efg', '567', '123', 'aa']

console.log(arr.join()); // efg,567,123,aa 将所有数组成员组成一个字符串返回。如果不提供参数,默认用逗号分隔

console.log(arr.join('-')); // efg-567-123-aa

var arr1 = ['a','b','c'];

console.log(arr.concat(arr1)); // ['efg', '567', '123', 'aa', 'a', 'b', 'c'] 数组合并:在原数组的末尾添加新数组,然后返回一个新的数组

console.log(arr.reverse()); // ['aa', '123', '567', 'efg'] 反转排序:颠倒数组中元素的顺序,然后返回一个新的数组

console.log(arr.slice(1,3)); // ['123', '567']

arr = ['abc','efg','cbd','ppg']

console.log(arr.sort()); // ['abc', 'cbd', 'efg', 'ppg']

arr= ['1','4','5','2','6','3'];

console.log(arr.sort()); // ['1', '2', '3', '4', '5', '6']

console.log(arr.sort(function(a,b){return b-a})); // ['6', '5', '4', '3', '2', '1']

arr.map(function); // 数组遍历(依次执行每个元素 fun)

arr.forEach(function); // 数组遍历(依次执行每个元素 fun)

arr.filter(function); // 数组遍历(依次执行每个元素 fun)

console.log(arr.some()); // 依次执行每个元素,判断数组成员是否符合某种条件

console.log(arr.every()); // 依次执行每个元素,判断数组成员是否符合某种条件

console.log(arr.reduce()); // 依次处理数组的每个成员,最终累计为一个值,左->右

console.log(arr.reduceRight()); // 依次处理数组的每个成员,最终累计为一个值,右->左

console.log(arr.indexOf()); // 元素首次出现的位置,可用来查找数组元素是否存在,存在则返回当前的位置下标,不存在则返回-1

console.log(arr.lastIndexOf()); // 元素最后出现的位置,,可用来查找数组元素是否存在,存在则返回当前的位置下标,不存在则返回-1

Number对象

var num = new Number(10);

console.log(typeof(num)); // object

// toString() 转成字符串:如果带一个数字参数,则转成该参数的进制,再转成字符串,不带参数则默认转成十进制

console.log(num.toString()); // 10

console.log(num.toString(2)); // 1010

// toFixed() 保留指定位数的小数,例如参数为3则保留两位小数,转成字符串

console.log(num.toFixed(3)); // 10.000

// toExponential() 科学计数法:带一个参数(0-20),表示小数的有效位数,超出范围侧报错RangeError

console.log(num.toExponential(3)); // 0e+1

// toPrecision() 转为指定位数的有效数字

console.log(num.toPrecision(3)); // 10.0

String对象

var str = new String('string');

console.log(typeof(str)); // object

// 字符串的长度

console.log(str.length); // 6

// charAt(index) 获取指定位置的字符,index表示位置下标

console.log(str.charAt(2)); // r

// fromCharCode() 转成Unicode码对应的字符串

var code = String.fromCharCode(65);

console.log(code); // A

// charCodeAt(index) 转成指定位置字符的Unicode码

console.log(str.charCodeAt(3)); // 105 'i'对应的Unicode码是105

console.log(str.charCodeAt(25)); // NaN str中不存在第25个字符,所以无法转换

// concat(new str) 连接两个字符串,返回一个新的字符串

var str1 = 'sasd';

console.log(str.concat(str1)); // stringsasd

str = str.concat(str1);

// slice(start,end) 字符串截取

console.log(str.slice(1,3)); // tr

console.log(str.slice(str.length-3,str.length)); // asd 截取字符串最后三个字符

// substring(start,end) 字符串截取

console.log(str.substring(1,3)); // tr

// substr(start,length) 字符串截取

console.log(str.substr(1,3)); // tri

// indexOf(s) 查找字符串位置 不存在则返回-1

console.log(str.indexOf('r')); // 2

// lastIndexOf(s) 查找字符串位置 不存在则返回-1

console.log(str.indexOf('r')); // 2

// trim() 去除字符串两端的空格

var newStr = ' newStr ';

console.log(newStr.trim()); // newStr

// toLowerCase() 字符串全部转为小写,不改变源字符串,返回新的字符串

console.log(newStr.toLowerCase()); // newstr

// toUpperCase() 字符串全部转为大写,不改变源字符串,返回新的字符串

console.log(newStr.toUpperCase()); // NEWSTR

// localeCompare(str2) 比较两个字符串:返回一个整数,如果小于0,表示第一个字符串小于第二个字符串;如果等于0,表示两者相等;如果大于0,表示第一个字符串大于第二个字符串

var str2 = 'str2';

console.log(newStr.localeCompare(str2)); // -1

newStr=newStr.trim();

console.log(newStr.localeCompare('newStr')); // 0

console.log(newStr.localeCompare('newSt')); // 1

// match(regexp) 字符串匹配(查找) regexp可以为正则表达式,将匹配处理的字符组成一个数组,然后返回来

console.log(newStr.match(/e/g)); // ['e']

str = 'lonely agin exit lege';

console.log(str.match(/e/g)); // ['e', 'e', 'e', 'e']

// search(str) 字符串查找 返回字符串出现的第一次位置,没有则返回-1

console.log(str.search('e')); // 3

// replace(oldValue,newValue) 字符串替换

console.log(str.replace('e','ab')); // lonably agin exit lege 默认只会替换第一个

console.log(str.replace(/e/g,'ab')); // lonably agin abxit labgab 全部替换

// split() 字符串分割 返回分割后的数组

console.log(str.split('e')); // ['lon', 'ly agin ', 'xit l', 'g', '']

Math对象

Math对象?没印象?哈哈

Math对象常用于数学计算(数学方法、三角函数);它并不是一个对象的类,它也没有构造函数。

三角函数

// Math.sin():返回参数的正弦

console.log(Math.sin(60)); // -0.3048106211022167

// Math.cos():返回参数的余弦

console.log(Math.cos(60)); // -0.9524129804151563

// Math.tan():返回参数的正切

console.log(Math.tan(60)); // 0.320040389379563

// Math.asin():返回参数的反正弦(弧度值)

console.log(Math.asin(60)); // NaN

// Math.acos():返回参数的反余弦(弧度值)

console.log(Math.acos(60)); // NaN

// Math.atan():返回参数的反正切(弧度值)

console.log(Math.atan(60)); // 1.554131203080956

数学任务方法

var num = -123.456

var num1 = 456.789

// Math.abs():返回参数的绝对值

console.log(Math.abs(num)); // 123.456

// Math.ceil():向上取整,接受一个参数,返回大于该参数的最小整数。

console.log(Math.ceil(num)); // -123

// Math.floor():向下取整

console.log(Math.floor(num)); // -124

// Math.max(n,n1,...):取最大值,可接受多个参数,返回最大值

console.log(Math.max(1,2,3,4,4,5,2,8,1)); // 8

// Math.min(n,n1,..):去最小值,可接受多个参数,返回最小值

console.log(Math.min(1,2,3,4,4,5,2,8,1)); // 1

// Math.pow(n,e):指数运算, 返回以第一个参数为底数、第二个参数为幂的指数值

console.log(Math.pow(2,3)); // 8 ——> 2^3=8

// Math.sqrt():开平方:返回参数值的平方根。如果参数是一个负值,则返回NaN。

console.log(Math.sqrt(4)); // 2

console.log(Math.sqrt(16)); // 4

// Math.log():返回以e为底的自然对数值。

console.log(Math.log(13)); // 2.5649493574615367

// Math.exp():返回e的指数,也就是常数e的参数次方。

// Math.round():四舍五入

console.log(Math.round(num)); // -123

// Math.random():返回0到1之间的一个伪随机数,可能等于0,但是一定小于1。

console.log(Math.random()); 0.46221618250258945

JSON对象

JSON.stringify(); 用于将一个值转为字符串,该字符串应该符合JSON格式

JSON.parse(); 用于将JSON字符串转化成对象

RegExp对象(正则表达式)

什么是 RegExp?正则表达式描述了字符的模式对象,当您检索某个文本时,可以使用一种模式来描述要检索的内容。简单的模式可以是一个单独的字符,更复杂的模式包括了更多的字符,并可用于解析、格式检查、替换等等,您可以规定字符串中的检索位置,以及要检索的字符类型;RegExp 就是这种模式。

// reg和reg1的表示方法是等价的,都可以做出相同的匹配

var reg = new RegExp("\\w+");

var reg1 = /\w+/;

// 汉字匹配

/[^\u4E00-\u9FA5]/g

// 数字匹配

/\D/g 或者 /[0-9]/g

// 字母匹配

/[a-z]/g 或者 /[A-Z]/g

详情请参考菜鸟教程[JavaScript RegExp对象]

浏览器对象模型(BOM)

浏览器对象模型:Window 对象、Navigator 对象、Screen 对象、History 对象、Location 对象

Window对象:表示浏览器中打开的窗口

Navigator对象:包含有关浏览器的信息

Screen对象:包含有关客户端显示屏幕的信息

History对象:包含用户(在浏览器窗口中)访问过的 URL, 它是window对象的一部分,可通过 window.history 属性对其进行访问

Location对象:包含有关当前 URL 的信息,它是window对象的一部分,可通过 window.location.xxx 格式的相关属性对其进行访问

存储对象:Web 存储 API 提供了 sessionStorage (会话存储) 和 localStorage(本地存储)两个存储对象来对网页的数据进行添加、删除、修改、查询操作

提示:想要深入了解本章节详情可参考菜鸟教程[Browser对象]

相关推荐

Win7蓝牙在哪里打开?Win7蓝牙打开方法介绍
www.bet3365.com

Win7蓝牙在哪里打开?Win7蓝牙打开方法介绍

📅 07-20 👁️ 2499
肉字的成语有哪些
beat365老版本

肉字的成语有哪些

📅 08-03 👁️ 8287