01-JS资料

JS数据类型

var str = 'abc';
var num = 123;
var bool = true;
var und = undefined;
var n = null;
var arr=['x','y','z'];
var obj = {};
var fun = function() {};
console.log(typeof str);   //string
console.log(typeof num);   //number
console.log(typeof bool); //boolean
console.log(typeof und);   //undefined
console.log(typeof n);     //object
console.log(typeof arr);   //object
console.log(typeof obj);   //object
console.log(typeof fun);   //function 

对象

对象常用属性和方法

SON.stringify() 方法是将一个JavaScript值(对象或者数组)转换为一个 JSON字符串; JSON.parse() 方法用于将一个 JSON 字符串转换为对象。

hasOwnProperty() 该方法可以判断对象的自有属性是否存在

assign() 该方法主要用于对象的合并,Object.assign(o1,o2)

defineProperties()直接在一个对象上定义新的属性或修改现有属性,并返回该对象。

keys() 返回一个由一个给定对象的自身可枚举属性组成的数组,Object.keys(o);

values();返回一个给定对象自己的所有可枚举属性值的数组

entries();返回一个给定对象自身可枚举属性的键值对数组

属性的设置和获取

1、设置属性

var obj = {};

obj.name='aaaa';

obj['age'] = 20;

2、获取属性

obj.name;

obj['age'];

3、属性的删除

var o2= { name:'abc', age:18 };

delete o2.name;    

console.log(o2);

检测属性

检测属性 该方法可以判断对象的自有属性是否存在

in 运算符 检测属性是否存在于某个对象中,自有属性和继承属性都返回true

var obj={ name:'sonia', age:22 };

console.log('name' in obj);//自有属性

引用类型如何深拷贝

//引用类型深拷贝?结果证明是浅拷贝
//如果对象只有一级属性,Object.concat可以实现深拷贝
var arr1 = [1,2,3,[4,5]]
var arr2 = arr1.concat()
arr1.push(11)
arr1[3][0]=100; 
console.log(arr1);
console.log(arr2);//Object.assign对于对象1级属性,可以是深拷贝,多级属性是浅拷贝
var o1= {id:10}
var o2 = Object.assign({},o1);
o1.id = 100
console.log(o1.id);
console.log(o2.id);var o1= {id:10,test:'o1',children:{v:'o1'}}
var o2 = Object.assign({},o1);
o1.id = 100
o1.children.v='v2';
console.log(o1);
console.log(o2);

最简单的深拷贝方法是序列化

  var obj = {name: "fangfang",age: 18,children: { id: 1 },};var obj2 = JSON.parse(JSON.stringify(obj));obj.name = "alice";obj2.children.id = 99;console.log(obj);console.log(obj2);

但是序列化实现深拷贝有很多坑:

  1. 如果obj里存在时间对象,JSON.parse(JSON.stringify(obj))之后,时间变成了字符串
  2. 如果obj里有RegExp、Error对象,则序列化后的结果只得到空对象
  3. 如果obj里有函数、undefined,则序列化的结果会把函数undefined丢失
  4. 如果obj里有NaN,Infinity,则序列化的结果会变成null
  5. JSON.stringify只能序列化对象的可枚举的自有属性。如果obj中的对象是由构造函数生成的,则使用JSON.parse()深拷贝后,会丢弃对象的constructor
  6. 如果对象中存在循环引用的情况,也无法进行正确的深拷贝

自定义深拷贝方法

  function deepCopy(newObj, obj) {var o = newObj;for (var key in obj) {if (typeof obj[key] === "object") {//判断obj[key]的类型,是数组还是对象,使用constructor严格判断对象是由谁构造出来的o[key] = obj[key].constructor === Array ? [] : {};deepCopy(o[key], obj[key]);} else {o[key] = obj[key];}}return o;}

预解析

JavaScript预解析,可以理解为把变量或者函数预先解析到使用的环境中

console.log(a);
var a = 10;
//结果输出undefined

预解析过程

第一步:预先解析var、function等,提升声明变量

第二步:预解析完毕后,逐行正常由上而下解析

f();//error
//函数表达式
var f = function () {};fn();//OK
//函数声明
function fn() {}//函数表达式和函数声明的最大区别是:预解析。函数声明有预解析功能
//也就是function声明的函数会在执行前提前解析

如果变量名和函数名相同了,谁的优先级高?

console.log(f);
function f(){console.log("456");
}
var f = 123;
//结果输出:[Function: f]console.log(f);
var f = 123;
function f(){console.log("456");
}
//结果还是输出:[Function: f]

同名函数和变量,函数的优先级会更高,也就是函数取代变量。

方法内部也存在预解析:

  var b = 10;function f3() {console.log(b);var b = 100;}f3(); //undefined/**************解析过程***************/var b;function f3(){}b=10;f3();//f3方法内部预解析var b;console.log(b);//此时是undefinedb=100;

作用域

作用域:它是指对某一变量和方法具有访问权限的代码空间,在JS中, 作用域是在函数中维护的。

表示变量 或函数起作用的区域,指代了它们在什么样的上下文中执行,亦即上下文执行环境

ES5的作用域只有两种:全局作用域和局部作用域(局部作用域又叫函数作用域)

var a = 1;
//if(true)的语句执行完成之后会自动销毁,从而将var a = 10,提升为全局变量
if (true) {
var a = 10;
}
console.log(a); //输出10

全局变量和局部变量同名的坑:

1、在全局变量和局部变量不同名时,其作用域是整个程序

2、在全局变量和局部变量同名时,全局变量的作用域不包含同名局部变量的作用域

var c = 30;
function f2(){var c;console.log(c);
} 
f2();//undefined

作用域链

执行函数的时候,先从函数内部寻找变量,如果找不到,会向创建函数的作用域内寻找变量

  var a = 1;function f1() {var a = 10;function f2() {var a = 20;console.log(a);//20}function f3() {console.log(a);//10}f2();f3();}f1();console.log(a);//1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/85652.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/85652.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习日记-day34-6.20

知识点: 1.快速入门 知识点 核心内容 重点 IOC容器创建 通过ClassPathXmlApplicationContext加载XML配置文件创建容器,关联beans.xml 容器与配置文件的绑定关系(多配置文件支持) Bean获取方式 1. getBean(String id)返回…

如何使用 neptune.ai 优化模型训练期间的 GPU 使用率

GPU 可以大大加速深度学习模型的训练,因为它们专门用于执行神经网络核心的张量运算。 由于 GPU 是昂贵的资源,因此充分利用它们至关重要。GPU 使用率、内存利用率和功耗等指标可以洞悉资源利用率及其改进潜力。提高 GPU 使用率的策略包括混合精度训练、优…

腾讯混元3D制作简单模型教程-1

腾讯混元3D制作简单模型的零门槛教程,涵盖新手快速入门与进阶操作,结合官方工具特性及行业实践,分为两个核心板块: 🎯 一、新手零门槛:5分钟生成可打印模型(适合完全小白) 通过腾讯元宝APP的“3D角色梦工厂”功能,无需任何建模基础: 上传照片 打开腾讯元宝APP → …

一个库,比如kott_tinymce ,想把的依赖库从kotti升级到kotti2 ,请问我是不是查找替换,把所有的kotti字符替换成kotti2就行了?

一个库,比如kott_tinymce ,想把的依赖库从kotti升级到kotti2 ,请问我是不是查找替换,把所有的kotti字符替换成kotti2就行了? kotti和kotti2的包结构、模块路径、接口完全一样,除了import kotti 变成kotti2 如果 kotti…

企业实践 | 银河麒麟KylinOS-V10(SP3)高级服务器操作系统基础安装指南

前言:国产操作系统的崛起与实践背景 在国产化浪潮与信息技术自主可控的大背景下,银河麒麟操作系统作为国产操作系统的代表之一,正逐步成为企业级应用的重要选择。本文将详细介绍银河麒麟高级服务器操作系统V10 SP3版本的基础知识与安装实践&…

Ubuntu 一键安装 ROS

Ubuntu 一键安装 ROS 安装命令如下: wget http://fishros.com/install -O fishros && . fishros 指令执行后,显示log如下图: 之后根据不同的系统安装对应的ros版本即可。

深度学习——基于卷积神经网络实现食物图像分类【4】(使用最优模型)

文件目录 引言一、环境准备二、数据预处理训练集预处理说明:验证集预处理说明: 三、自定义数据集类四、设备选择五、CNN模型构建六、模型加载与评估1. 加载预训练模型2. 准备测试数据3. 测试函数4. 计算准确率 七、完整代码八、总结 引言 本文将详细介绍…

C++基础算法————并查集

C++并查集详解与实战指南 一、引言 并查集(Union-Find)是一种高效的数据结构,用于处理一些不相交集合的合并与查询问题。它在图论、社交网络、网络连通性等领域有广泛的应用。并查集的核心思想是通过一个数组来记录每个元素的父节点,从而将元素组织成若干棵树,每棵树代表…

系统性能优化的关键手段

系统性能的提升方向 服务器并发处理能力:通过优化内存管理策略、选择合适的连接模式(长连接或短连接)、改进 I/O 模型(如 epoll、IOCP)、以及采用高效的服务器并发策略(如多线程、事件驱动等)&a…

httpclient实现http连接池

HTTP连接池是一种优化网络通信性能的技术,通过复用已建立的TCP连接减少重复握手开销,提升资源利用率。以下是关键要点: 核心原理与优势 ‌连接复用机制‌ 维护活跃连接队列,避免每次请求重复TCP三次握手/SSL协商,降低…

广义焦点丢失:学习用于密集目标检测的合格和分布式边界盒之GFL论文阅读

摘要 一阶段检测器通常将目标检测形式化为密集的分类与定位(即边界框回归)问题。分类部分通常使用 Focal Loss 进行优化,而边界框位置则在狄拉克δ分布下进行学习。最近,一阶段检测器的发展趋势是引入独立的预测分支来估计定位质量,所预测的质量可以辅助分类,从而提升检…

Real-World Deep Local Motion Deblurring论文阅读

Real-World Deep Local Motion Deblurring 1. 研究目标与实际问题意义1.1 研究目标1.2 实际问题1.3 产业意义2. 创新方法:LBAG模型与关键技术2.1 整体架构设计2.2 关键技术细节2.2.1 真实模糊掩码生成(LBFMG)2.2.2 门控块(Gate Block)2.2.3 模糊感知补丁裁剪(BAPC)2.3 损…

【Docker基础】Docker镜像管理:docker commit详解

目录 引言 1 docker commit命令概述 1.1 什么是docker commit 1.2 使用场景 1.3 优缺点分析 2 docker commit命令详解 2.1 基本语法 2.2 常用参数选项 2.3 实际命令示例 2.4 提交流程 2.5 步骤描述 3 docker commit与Dockerfile构建对比 3.1 构建流程对比 3.2 对…

可调式稳压二极管

1.与普通稳压二极管的比较: 项目普通稳压二极管可调式稳压二极管(如 TL431)输出电压固定(如5.1V、3.3V)可调(2.5V ~ 36V,取决于外部分压)精度低(5%~10%)高&a…

Kafka使用Elasticsearch Service Sink Connector直接传输topic数据到Elasticsearch

链接:Elasticsearch Service Sink Connector for Confluent Platform | Confluent Documentation 链接:Apache Kafka 一、搭建测试环境 下载Elasticsearch Service Sink Connector https://file.zjwlyy.cn/confluentinc-kafka-connect-elasticsearch…

讯方“教学有方”平台获华为昇腾应用开发技术认证!

教学有方 华为昇腾应用开发技术认证 权威认证 彰显实力 近日,讯方技术自研的教育行业大模型平台——“教学有方”,成功获得华为昇腾应用开发技术认证。这一认证不仅是对 “教学有方” 平台技术实力的高度认可,更标志着讯方在智慧教育领域的…

保护你的Electron应用:深度解析asar文件与Virbox Protector的安全策略

在现代软件开发中,Electron框架因其跨平台特性而备受开发者青睐。然而,随着Electron应用的普及,如何保护应用中的核心资源文件——asar文件,成为了开发者必须面对的问题。今天,我们将深入探讨asar文件的特性&#xff0…

端口安全配置示例

组网需求 如图所示,用户PC1、PC2、PC3通过接入设备连接公司网络。为了提高用户接入的安全性,将接入设备Router的接口使能端口安全功能,并且设置接口学习MAC地址数的上限为接入用户数,这样其他外来人员使用自己带来的PC无法访问公…

零基础RT-thread第四节:电容按键

电容按键 其实只需要理解,手指按上去后充电时间变长,我们可以利用定时器输入捕获功能计算充电时间,超过无触摸时的充电时间一定的阈值就认为是有手指触摸。 基本原理就是这样,我们开始写代码: 其实,看过了…

SQL基础操作:从增删改查开始

好的!SQL(Structured Query Language)是用于管理关系型数据库的标准语言。让我们从最基础的增删改查(CRUD)​​ 操作开始学习,我会用简单易懂的方式讲解每个操作。 🛠 准备工作(建表…