前端开发笔记——JavaScript

简介: 阿里云前端路线JavaScript入门笔记
JS基础知识
  • 变量命名规则
  1. 变量的名字必须是数字、字母、下划线和$组成
  2. 变量的名字不能以数字开头
  3. 变量的名字不能是关键字for while if
  4. 建议 变量有意义
  5. Js中变量区分大小写
  6. 如果变量重名了,后面的会替换前面的
  7. 变量的命名尽可能使用驼峰法命名
  • 注释
  1. //
  2. / 无论是什么都不会被运行 /
JS数据类型
  • 数值Number、字符串String、布尔Booleanundefinednull、对象Object(函数、数组)
  1. 如果要在字符串中使用引号,请使用转义字符 \'
  2. 使用单引号或者双引号引起来的才是字符串
  3. 字符串相加与数值运算
  4. +既可以作为数学运算使用也可以作为字符串拼接使用
  5. 从前往后运算,如果两个变量都是数值型那么加号作为数学运算符
  6. 直到遇到一个字符串,此后所有的加号都是字符串拼接
  • 类型转换
  1. 其他类型转为数值类型:
var a=Number(null) //0
var b=Number(undefined) //NaN
var c=Number("c") ///NaN

var d=parseInt(null) //NaN
var e=parseInt(undefined) //NaN
var f=parseInt('23k') //23
var g=parseInt('k23') //NaN
  1. 其他类型转换为布尔类型:
var a=Boolean('0') //true
var b=Boolean(0) //false
var c= Boolean(null) //false
var d=Boolean(undefined) //false
var e=Boolean('') //false
var f=Boolean(' ')//true
JS操作符与运算符
  • 操作符在变量前面,先进行自身运算,再进行其他运算
  • 操作符在变量的后面,先进行其他运算,再进行自身运算
  • 在JS中 ,逻辑运算的结果是决定整个表达式的子表达式
var a=1;
var b=2;
var c=0;

console.log(c && b); //0
console.log(a || c); //1
//运算优先级 先运算&&再运算||
console.log(a||c&&b); //1
console.log(a&&b) //2(b是决定整个表达式的子表达式)
console.log(b&&a) //1
  • JS是一种弱类型语言,变量的数据类型存在自动转换
var a='2';
var b=2;
//==只比较值,不比较数据类型
console.log(a==b); //true
//=== 全等比较 既比较值也比较数据类型
console.log(a===b); //false
  • 运算符优先级(从高到低)
  1. ()优先级最高
  2. 一元运算符 ++ -- !
  3. 算数运算符 先* / 后+ -
  4. 关系运算符 > < >= <=
  5. 相等运算符 == === != !==
  6. 逻辑运算符 先&&后||
  7. 赋值运算 =
JS语句
  • switch case不加break和加break的区别
//不加break未捕获到
var a=10;
switch(a){
    case 1:
        console.log(1);
    case 2:
        console.log(2);
    case 5:
        console.log(5);
    default:
        console.log("ok");
}//ok

//不加break捕获到
var a=2;
switch(a){
    case 1:
        console.log(1);
    case 2:
        console.log(2);
    case 5:
        console.log(5)
    default:
        console.log("ok")
}//2 5 ok

//加break捕获到
var a=2;
switch(a){
    case 1:
        console.log(1);
        break;
    case 2:
        console.log(2);
        break;
    case 5:
        console.log(5);
        break;
    default:
        console.log("ok");
        break;
}//2
  • do while循环 先执行一次代码,然后再进行条件判断
JS数组
  • 创建数组
var a1=[];//直接定义空数组
var a2=new Array(1,"2",3)//构造函数方式创建数组
JS函数
  • 形参和实参

形式参数:是在声明函数时写的,多个形参使用“,”隔开,形参的值是不固定,形参仅仅是一个占位。与实参实际传入的值要一一对应。

实际参数:在调用时,实际传入函数中的值,多个使用“,”隔开,传入后,在函数中使用形参获取具体的值。

  • 函数返回值
  1. 如果函数中没有return,那么函数调用之后的返回值就是undefined。
function fun(a,b){
    var c=a-b;
}
var res=fun(10,1);
console.log(res) //undefined
  1. 如果函数中有return,但return后面没有值,那么函数调用之后的返回值就是undefined。
function fun(a,b){
    var c=a-b;
    return ;
}
var res=fun(10,1);
console.log(res) //undefined
  1. 函数return之后,不管后面有什么代码,均不执行,return后函数调用结束。
function fun(a,b){
    var c=a-b;
    return c;
    console.log(a);
}
var res=fun(10,1);
console.log(res) //9
  • 匿名函数

作用域在函数当中,防止全局变量的污染,封装一个局部作用。

  • 函数当作参数
  1. 回调
function f1(s){
    var k=123+s;
    console.log(k);
    s();
}
var f2=function(){
    console.log(123);
}
f1(f2);
  1. 闭包
function f1(){
    var a=10;
    var f2=function(){
        alert(12);
    }
    return f2;
}
var res=f1();
res();
  • 变量提升:在代码执行之前变量已经在编译阶段被声明

JS代码的运行分为两个阶段

  1. 解析(编译)阶段:语法检查,变量及函数进行声明
  2. 运行阶段:变量的赋值,代码流程的执行
console.log(a);//undefined
var a=1;
//先声明变量再运行代码
  • 代码执行

在变量未赋值的情况下,如果函数与变量同名,那么函数声明会替代变量声明

console.log(a);//f a{console.log("a"); }
function a(){
    console.log("a");
}
var a=1;
console.log(a);//1
  • 作用域与作用域链

作用域链:当函数中使用某个变量时,优先在自己的作用域中查找。如果找不到,就会向上一级作用域查找。如果找不到继续往上一层查找,直到全局作用域。如果还找不到直接报错。

// var a=0;
function f1(){
    // var a=1;
    function f2(){
        // var a=2;
        function f3(){
            // var a=3;
            console.log(a);
        }
        f3();
    }
    f2();
}
f1();
//从上到下取消注释
// a is not defined
//0
//1
//2
//3
JS对象
  • this指向
  1. 在方法中的this指的就是这个方法所在的对象
var obj1={
    name:'fqc',
    age:18,
    fu:function(){
        var a=this.age;
        console.log(a)
    }
}
obj1.fu();
  1. 普通函数中的this指向全局对象(window)
function fun(){
    console.log(this)//window
}
  1. this运行在哪个对象下,就指向哪个对象
k = '678';
function fun() {
    var k = '89'
    console.log(this.k);
}
var o1 = {
    k:'123',
    f:fun,
}
var o2 = {
    k:'345',
    f:fun,
}
o1.f();//123
o2.f();//345
  • 包装对象:原始类型(数值、字符串、布尔)的数据在一定条件下可以自动转为对象。如果包装对象使用完成会立即自动销毁。
  • 数字对象:获取n-m之间随机数的值
Math.floor(Math.random()*(m-n)+n);
  • 日期对象

JS中获取的时间是计算本地时间,JS中月份的数组是从0开始的。

其它
  • localStorage and sessionStorage

HTML5提供了两种在客户端存储数据的新方法:

  1. localStorage-没有时间限制的数据存储(5M)
  2. sessionStorage-针对一个session的数据存储,当用户关闭当前浏览器窗口,数据会被删除(5M)。

之前,这些都是由cookie完成的。但是cookie(4k)不适合大量数据的存储,因为它们由每个对服务器的请求来传递,这使得cook速度很慢而且效率也不高。

个人博客地址:www.fangqc.xyz

相关文章
|
2月前
|
JavaScript 前端开发 程序员
前端原生Js批量修改页面元素属性的2个方法
原生 Js 的 getElementsByClassName 和 querySelectorAll 都能获取批量的页面元素,但是它们之间有些细微的差别,稍不注意,就很容易弄错!
|
2月前
|
JavaScript 前端开发 Java
springboot解决js前端跨域问题,javascript跨域问题解决
本文介绍了如何在Spring Boot项目中编写Filter过滤器以处理跨域问题,并通过一个示例展示了使用JavaScript进行跨域请求的方法。首先,在Spring Boot应用中添加一个实现了`Filter`接口的类,设置响应头允许所有来源的跨域请求。接着,通过一个简单的HTML页面和jQuery发送AJAX请求到指定URL,验证跨域请求是否成功。文中还提供了请求成功的响应数据样例及请求效果截图。
springboot解决js前端跨域问题,javascript跨域问题解决
|
2月前
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
52 5
|
2月前
|
缓存 前端开发 JavaScript
JavaScript前端路由的实现原理及其在单页应用中的重要性,涵盖前端路由概念、基本原理、常见实现方式
本文深入解析了JavaScript前端路由的实现原理及其在单页应用中的重要性,涵盖前端路由概念、基本原理、常见实现方式(Hash路由和History路由)、优点及挑战,并通过实际案例分析,帮助开发者更好地理解和应用这一关键技术,提升用户体验。
77 1
|
2月前
|
JSON 前端开发 JavaScript
聊聊 Go 语言中的 JSON 序列化与 js 前端交互类型失真问题
在Web开发中,后端与前端的数据交换常使用JSON格式,但JavaScript的数字类型仅能安全处理-2^53到2^53间的整数,超出此范围会导致精度丢失。本文通过Go语言的`encoding/json`包,介绍如何通过将大整数以字符串形式序列化和反序列化,有效解决这一问题,确保前后端数据交换的准确性。
55 4
|
2月前
|
资源调度 前端开发 JavaScript
vite3+vue3 实现前端部署加密混淆 javascript-obfuscator
【11月更文挑战第10天】本文介绍了在 Vite 3 + Vue 3 项目中使用 `javascript-obfuscator` 实现前端代码加密混淆的详细步骤,包括安装依赖、创建混淆脚本、修改 `package.json` 脚本命令、构建项目并执行混淆,以及在 HTML 文件中引用混淆后的文件。通过这些步骤,可以有效提高代码的安全性。
102 2
|
2月前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
170 1
|
2月前
|
移动开发 前端开发 JavaScript
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
于辰在大学期间带领团队参考网易游戏官网的部分游戏页面,开发了一系列前端实训作品。项目包括首页、2021校园招聘页面和明日之后游戏页面,涉及多种特效实现,如动态图片切换和人物聚合效果。作品源码已上传至CSDN,视频效果可在CSDN预览。
46 0
|
2月前
|
前端开发 JavaScript 安全
vite3+vue3 实现前端部署加密混淆 javascript-obfuscator
【11月更文挑战第7天】本文介绍了在 Vite 3 + Vue 3 项目中使用 `javascript-obfuscator` 实现前端代码加密混淆的详细步骤。包括项目准备、安装 `javascript-obfuscator`、配置 Vite 构建以应用混淆,以及最终构建项目进行混淆。通过这些步骤,可以有效提升前端代码的安全性,防止被他人轻易分析和盗用。
318 0
|
3月前
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
199 2