槽点极多的JAVASCRIPT

Posted ethan99

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了槽点极多的JAVASCRIPT相关的知识,希望对你有一定的参考价值。

原生JS && JQuery && BootStrap

原生 js

js 的三种插入方式

  1. 行间式 : 直接在html 标签内写入
<body id="body" onload="body.style.backgroundColor='red'">
  1. 内联式:在 script 标签中写入
<script type="text/javascript">
    body.style.backgroundColor='orange'
</script>
  1. 外联式:在 script 标签的 src 属性中引入 外部 js 文件
<script type="text/javascript" src="./js/01.js"></script>

三种方式不存在优先级,按照代码的执行顺序,谁后导入谁生效

注释

// 单行注释

/ ** / 多行注释

三种弹出框

  1. 普通弹出框 alert()
  2. 确认框 confirm()
  3. 输入框 prompt

变量的声明

<script>
var a;    // 未赋值时 a 默认为 undefined
a = 100       // 定义过的变量无需再次定义直接可以赋值
</script>

ES5变量的定义

? ES5标准下没有块级作用域,只有方法可以产生实际的局部作用域

<script>
//无块级作用域的局部变量
var a = 10;
//全局变量
b = 20;

//验证 : 
(function () 
        var x = 10;
        y = 20;
)()

alert(x) //报错,x只能在局部作用域中使用
alert(y); //正常使用


//块级作用域

    var n = 10; // 无视块级作用域
    m = 20;  // 全局变量,更无视块级作用域

alert(n)  // 可以
 alert(m)  // 可以
</script>

ES6变量的定义

<script>
//有块级作用域的局部变量
let aa = 100;
//有块级作用域的常量 
//注意 : 常量值不允许更改
const bb = 200;

//验证 : 

    let xx = 100;
    const yy = 200;

alert(xx);  // 无法访问
alert(yy);  // 无法访问
//函数产生的局部作用域同该情况
</script>

数据类型

number 数字类型

js 中没有 int float 类型,统一为 number 类型

<script>
  var a = 10;
  console.log(typeof a == 'number');
</script>

string 字符串类型

<script>
    var a = '字符串';
</script>

boolean 布尔类型

js 中 布尔类型分为 true false 两种

0 undefined null “” NaN 均为 false 其余为 true

undefined 未定义类型

未初始化的变量类型默认为 undefined 类型

<script>
    var b;
    console.log(b, typeof b);
    var c = undefined;
    console.log(c, typeof c);
</script>

function 函数类型

<script>
    var m = function () ;
</script>

object 对象类型

<script>
    var obj = ;
    obj = new Object();
    console.log(obj, typeof obj);
    console.log(obj instanceof Object);
</script>
特殊对象类型

null 空对象

<script>
    var o = null;
    console.log(o == null);
</script>

Array 数组对象

<script>
    o = new Array(1, 2, 3, 4, 5);
</script>

Data 时间对象

<script>
    o = new Date();
</script>

RegExp 正则对象

<script>
    o = new RegExp();
</script>

类型转换

显性转换

<script>
    // 1. 数字,布尔转化为  => 字符串
    var a = 10;
    var b = true;

    var c = new String(a);
    console.log(c, typeof c); // '10', object

    var c = String(a);
    console.log(c, typeof c); // '10', string
    c = String(b);
    console.log(c, typeof c); // 'true', string

    c = a.toString();
    console.log(c, typeof c); // '10', string
    c = b.toString();
    console.log(c, typeof c); // 'true', string
</script>
<script>
    // 2. 布尔,字符串转化为数字
    var aa = true;
    var bb = '10';

    var cc = Number(aa);
    console.log(cc, typeof cc); // 1 number
    cc = Number(bb);
    console.log(cc, typeof cc); // 10 number

    cc = + aa;
    console.log(cc, typeof cc); // 1 number
    cc = + bb;
    console.log(cc, typeof cc); // 10 number

    // 针对字符串
    cc = parseFloat('3.14.15.16abc');
    console.log(cc, typeof cc); // 3.14
    cc = parseInt('10.35abc');  // 10
    console.log(cc, typeof cc);
    // 字符串以非数字开头,结果为NaN
    // NaN(not a number)特点:
    // 1.非数字类型
    // 2.不与任何数相等,包含自己
    // 3.通过isNaN()进行判断
</script>

隐性转换(自动转换)

<script>
    5 + null  // 5
     "5" + null  // "5null"
    "5" + 1  // "51"
    "5" - 1  // 4
    "" + ? // "?"
</script>

三目运算符

结果 = 条件表达式 ? 结果1 :结果2

<script>
  var num = if 20 > 30 ? 1 : 0
</script>

ES6语法解构赋值

数组的解构赋值

<script>
    let [a, b, c] = [1, 2, 3]
    // a=1,b=2,c=3
    let [a, ...b] = [1, 2, 3]
    // a=1,b=[2,3]
</script>

对象的解构赋值

<scrip>
  let key: a = key: 10
  // a=10
</scrip>

字符串解构赋值

<script>
    let [a,b,c] = 'xyz'
    // a='x',b='y',c='z'
</script>

流程控制

if 语句

<script>
    if (表达式1) 
        code1;
     else if (表达式2) 
        code2;
     
    else 
        code3;
    
</script>

switch 语句

<script>
    switch (表达式) 
        case 值1: 代码块1; break;
        case 值2: 代码块2; break;
        default: 代码块3;
    

   //  1.表达式可以为 整数表达式 或 字符串表达式
   //  2.值可以为 整数 或 字符串
   //  3.break可以省略
   //  4.default为默认代码块,需要出现在所有case最下方,在所有case均未被匹配时执行
</script>

for 循环

<script>
    for (循环变量①; 条件表达式②; 循环变量增量③) 
        代码块④;
    
    for (var i = 0; i < 5; i++) 
      '循环体代码'
    
    // 1.循环变量可以在外、在内声明
    // 2.执行逻辑 ① ②④③ ... ②④③ ②,入口为①,出口为②,②④③个数为[0, n]
</script>

while 循环

<script>
    while (条件表达式) 
        代码块;
    
</script>

函数初级

函数的定义

function 函数名 (参数列表) 
    函数体;


var 函数名 = function (参数列表) 
    函数体;

匿名函数

function (参数列表) 
    函数体;


//匿名函数需要自调用
(function (参数列表) 
    函数体;
)(参数列表);

BOM操作

窗口操作

// 新tag打开目标地址
open("http://www.yahoo.com");
// 自身tag转跳目标地址
open("http://www.yahoo.com", '_self');
// 自定义窗口打开目标地址
open("http://www.yahoo.com", '_blank', 'width=300, height=300');

历史记录 history

// 历史后退
history.back();
// 历史前进
history.forward()

导航器 navigator

// 拥有浏览器信息的字符串
navigator.userAgent;

地址信息

// 协议
location.protocol
// 服务器
location.hostname
// 端口号
location.port
// 参数拼接
location.search

DOM操作

标签关系

获取父级标签 : sub.parentElement

获取上一个兄弟标签: sub.previousElementSibling

获取下一个兄弟标签: sub2.nextElementSibling

获取所有子标签: sup.children

获取第一个子标签: sup.firstElementChild

<div class="sup">
    <div class="sub1"></div>
    <div class="sub2"></div>
    <div class="sub3"></div>
</div>

<script>
    var sub2 = document.querySelector('.sub2');
    // 父级标签
    console.log(sub2.parentElement);
    // 上一个标签
    console.log(sub2.previousElementSibling);
    // 下一个标签
    console.log(sub2.nextElementSibling);

    var sup = document.querySelector('.sup');
    // 所有子标签
    console.log(sup.children);
    // 第一个子标签
    console.log(sup.firstElementChild);
    // 最后一个子标签
    console.log(sup.lastElementChild);
</script>

操作页面标签

// 创建一个div标签
var div = document.createElement("div");
// 设置属性样式
div.className='box';
// 添加到body末尾,返回自身
div = body.appendChild(div);
// 插入到body中box标签前,返回自身
div = body.insertBefore(div, box);
// 替换掉body中box标签,返回box
box = body.replaceChild(div, box);
// 在body中移除div,返回自身
div = body.removeChild(div);

获得标签对象

// 1.通过id名获取唯一满足条件的页面元素
document.getElementById('id名');
// 该方法只能由document调用

// 2、通过class名获取所有满足条件的页面元素
document.getElementsByClassName('class名');
// 该方法可以由document及任意页面元素对象调用
// 返回值为HTMLCollection (一个类数组结果的对象,使用方式同数组)
// 没有匹配到任何结果返回空HTMLCollection对象 ([])

// 3.通过tag名获取所有满足条件的页面元素
document.getElementsByTagName('tag名');
// 该方法可以由document及任意页面元素对象调用
// 返回值为HTMLCollection (一个类数组结果的对象,使用方式同数组)
// 没有匹配到任何结果返回空HTMLCollection对象 ([])

操作页面

  • innerText:普通标签内容(自身文本与所有子标签文本)(不被解析)
  • innerHTML:包含标签在内的内容(自身文本及子标签的所有)(被解析)
  • value:表单标签的内容
  • outerHTML:包含自身标签在内的内容(自身标签及往下的所有)

操作页面样式

div.style.backgroundColor = 'red';

结合css操作页面样式

页面元素对象.className = "";  // 清除类名
页面元素对象.className = "类名";  // 设置类名
页面元素对象.className += " 类名";  // 添加类名

一次性定时器

setTimeout(函数, 毫秒数, 函数所需参数(可以省略));

setTimeout(function (data) 
        console.log(data);
    , 1000, "数据");

持续性定时器

setInterval(函数, 毫秒数, 函数所需参数(可以省略));

 setInterval(function() 
        console.log("呵呵");
    , 1000);

定时器清除

  1. 持续性与一次性定时器通常都应该有清除定时器操作
  2. 清除定时器操作可以混用 clearTimeout() | clearInterval()括号参数为定时器编号
  3. 定时器的返回值就是定时器编号,就是普普通通的数字类型
  4. 允许重复清除
  5. 允许清除不存在的定时器编号
做个定时器
    var timer = setInterval(function() 
        console.log("呵呵");
    , 1000);
查看定时器的返回值是什么
    console.log(timer);// 打印1 ,则返回值就是创建过的定时器的编号

点击页面清除定时器
    document.onclick = function () 
        console.log("定时器清除了");
        clearInterval(timer);
        // clearTimeout(timer);
    ;

清除所有定时器

如果上方创建过n个定时器,那么timeout值为n+1
var timeout = setTimeout(function(), 1);
    for (var i = 0; i < timeout; i++) 
        // 循环将编号[0, n]所有定时器都清除一次
        clearTimeout(i)
    

绑定事件

on 绑定事件

document.onclick = function() 
    console.log("文档点击");

// on事件只能绑定一个方法,重复绑定保留最后一次绑定的方法
document.onclick = function() 
    console.log("文档点击");

// 事件的移除
document.onclick = null;

非 on 事件绑定

addEventListener('事件名',回调函数,冒泡方式);
document.addEventListener('click', function() 
     console.log("点击1");
)
document.addEventListener('click', function() 
     console.log("点击2");
)
// 非on事件可以同时绑定多个方法,被绑定的方法依次被执行
// addEventListener第三个参数(true|false)决定冒泡的方式
function fn () 
document.addEventListener('click', fn);
// 事件的移除
document.removeEventListener('click', fn);

事件的冒泡与默认事件

  • 事件的冒泡:父子都具有点击事件,不处理的话,点击子级也会出发父级的点击事件
  • 在子集绑定事件里设置ev.stopPropagation();ev.cancelBubble = true;
<body >
        <div id="sup">
          <div id="sub"></div>
      </div>
  </body>
  
  <script>
  var sub = document.querySelector('#sub');
  sub.onclick = function (ev) 
      // 方式一
      ev.stopPropagation();
      // 方式二
      ev.cancelBubble = true;
    console.log("sub click");
  
  </script>
  • 默认事件:取消默认的事件动作,如鼠标右键菜单
  • ev.preventDefault();return false;
<body>
        <div id="sup">
          <div id="sub"></div>
      </div>
  </body>
  
  <script>
  var sub = document.querySelector('.sub');
  sub.oncontextmenu = function (ev) 
      // 方式一
      ev.preventDefault();
      // 方式二
      return false;
    console.log("sub menu click");
  
  </script>

以上是关于槽点极多的JAVASCRIPT的主要内容,如果未能解决你的问题,请参考以下文章

Fast Flux技术——本质就是跳板,控制多个机器,同一域名指向极多的IP(TTL修改为0),以逃避追踪

javascript新手入门必读书籍推荐

炫酷 CSS 背景效果的 10 个代码片段

C语言 小数位极多如何处理,代码如下

VSCode自定义代码片段12——JavaScript的Promise对象

VSCode自定义代码片段12——JavaScript的Promise对象