javascript高级程序设计笔记(一)语法和操作符

本文深入浅出地介绍了JavaScript中的变量作用域、数据类型转换、位操作符、逻辑操作符及函数参数处理等内容,并探讨了如何有效利用这些核心概念。

最近看语言精粹这本小册子 结果发现难度有点太高了 很多东西都是一笔带过所以绝对看完函数先来看javascript高程 看起来第一感觉就是会平缓很多

  1. 在函数内用var声明的变量 ,在完成这个函数的调用也就是读到这个函数}的时候 会被销毁 注意是销毁。

  2. 在函数内用省略var声明的变量在退出函数之后并不会被销毁,所以是可以在函数外围被访问的。

  3. null在javascript中的实现为指向一个空的对象

    var nu = null;
    
    console.log(typeof nu); //类型为object

    所以当我们需要创建一个变量并在未来存储对象 我们可以给他初始化为null

    if(nu != null){
    
    }

    通过这样的方式来检查调用 我认为undefined属于没有右值的情况 而null其实是有有值的 是一个空的对象。

  4. boolean可以被强制转换成数字

  5. Number类型支持10/16/8进制 var a = 078;//8进制 var b = 0xAF;//16进制

  6. 浮点数 小数位为空或者小数位为0会被转换成整数

  7. NaN的意思为not a number 所以他是一个特殊数值 通过isNaN来测试是否不是数值isNaN("HelloWorld")

  8. 数值转换有三种方法把其他变量转换成数字 Number(); parseInt();
    parseFloat常用的为parseInt 支持第二个参数帮助标记一下 基数 比如parseInt("AF",16)//标记基数为16进制

  9. 字符串有转义比如\n代表换行符 一般有特殊用途
    字符串一旦声明无法更改 所谓的重新绑定字面量只是销毁原来的填充新的
    具体首先制造容器 然后填充 接着删除不需要的字符串字面量
    几乎所有的值都有这个方法toString(目标进制)//除了undefined null值没有
    也可以调用String(value) 这个函数范围最广 包含toString 如果支持toString就调用 如果不支持就把null undefined直接转换。

  10. 操作符
    一元操作符是只能操作一个值的操作符 是最简单的操作符。

    • 递增和递减操作符

      • 分前置和后置 前置的就是++a 先加后调用

      • 后置的就是a++ 先调用后加

    • 一元加减操作符

      • num = +num对值进行转换 但对值的内容一般不会有所影响 比如true flase会有变化

      • num = -num 把值变成负数

    • 位操作符(底层的更改 高效率 64转换成32位开始运算)

      • 按位非 ~ var num1 = 25; var num2 = ~num1;//-26 结果为内存保存的二进制树挨个取反 且数值-1

      • 按位与 25&3//-1转换成二进制数字对比 两者同位都为1则为1 否则都为0

      • 按位或var num = 25|3;同样是对比 二者都为0则为0 其他情况都为1

      • 按位或异 var num = 25^3; 二者相同为0 不同为1

      • 左移 num = num << 5表示整个移5位 少出来的用0填充 结果一般是增大

      • 有符号右移 num = num >> 5表示符号位右移 少出来的用符号位填充

      • 无符号的右移 和上面的类似 但少出来的符号位用0填充 也就是说本来是负数会变成正数 正数还是正数(因为1代表负数 0代表正数嘛)

    • 逻辑操作符

      • 逻辑非 用一个!表示 首先把值转换成boolean值 然后取反
      • 逻辑与 用两个 & 表示同样转换boolean然后对比 都为true则true 其他均为false 短路 第一个为false就直接结束了
      • 逻辑或 用两个|表示 转换 对比 都为false为false 其他均为true 同样短路 找到第一个为true则取消第二次对比 直接返回。而返回值并不一定是true或者false 根据对比的值不同 在obj的情况下返回的就是obj 这也就是利用短路或做后备赋值的原理。
    • 乘性操作符
      -乘 除 余 三大 余为var a = 25 % 3;

    • 关系操作符 大于 小于 大于等于 小于等于

      • 字符串之间的比较会比较奇怪 比如两个字符串会挨个对比每个字节 如果你想要进行对比需要都转换成小写.toLowerCase()不然大小写无法正确对比

      • 两个数字字符串对比会比较编码 一个数字一个数字字符串会转换成数字比较

      • 任何值与NaN对比都为false

    • 相等操作符

      • == != === ===为严格等于或者叫完全等于 字符串的3和数值3在完全等于下并不相等
    • 条件运算符(三元运算)

    • 赋值操作符

      • =等于可以和其他的运算符合作 比如

      • a += 6;
        a -= 6;
        a *= 6;
        a /= 6;
        a %= 6;
        a <<= 6;
        a >>= 6;
        a >>>= 6;

    • with(常用的if for do while 语句就不记了)

      • with(location){
        var qs = search.substring(1)
        }
        >由于性能不佳 在大型工程不建议使用
    • switch

      • var i =4;
        switch (i){
        case 4:
        alert(“4”);
        break;
        case 6:
        // 合并
        case 7:
        alert(“6”+”7”);
        break;
        }

  1. 函数
    • 函数的返回会终止函数的指向 return之后的语句不会被执行
    • 参数
      • js并不关心你传了什么类型的参数 传了多少个因为内部函数接收的时候,接收的只是一个参数组成的数组 他不会访问里面的value 而这个数组可以通过arguments对象来访问 ,这个对象具有一个数组的基本特征。所以你可以通过检查这个对象的特性来执行一些语句 比如length为0就如何如何。这也算是削弱版的重载。
      • arguments支持和形参一起使用 比如arguments[0] + num1;
      • arguments还有一个非常重要的特性 他会和实参进行随时的同步 也就是说 当你修改了arguments或者实参的值 两者都会立马同步。 但这并不代表两者指向同一块区域,两者只是保持同步而已。
      • 参数 还有一个特性 当你传入的个数与实际不符 实参<形参 那么少出来的用undefined填充 如果实参>形参 多出来被忽略。
    • 没有重载
      • 重载加java等语言中一个非常重要的特性 其表现为多个函数名称相同(同一等级内)但其签名(参数的个数 与 类型)不同,当你实际调用时,通过不同的签名来进入不同的函数
      • 在javascript中 如果你定义了两个名称相同的函数 控制权永远在后定义的函数之中(猜测可能在运行前 提升过程中 后声明的被提升 覆盖前面的函数)
      • 因为JavaScript中没有签名这个概念,他并不会检查进来的参数。所以在JavaScript 不可能有完美重载,你只能靠对arguments进行一些检查来做到模仿重载的效果。
、数据采集层:多源人脸数据获取 该层负责从不同设备 / 渠道采集人脸原始数据,为后续模型训练与识别提供基础样本,核心功能包括: 1. 多设备适配采集 实时摄像头采集: 调用计算机内置摄像头(或外接 USB 摄像头),通过OpenCV的VideoCapture接口实时捕获视频流,支持手动触发 “拍照”(按指定快捷键如Space)或自动定时采集(如每 2 秒采集 1 张),采集时自动框选人脸区域(通过Haar级联分类器初步定位),确保样本聚焦人脸。 支持采集参数配置:可设置采集分辨率(如 640×480、1280×720)、图像格式(JPG/PNG)、单用户采集数量(如默认采集 20 张,确保样本多样性),采集过程中实时显示 “已采集数量 / 目标数量”,避免样本不足。 本地图像 / 视频导入: 支持批量导入本地人脸图像文件(支持 JPG、PNG、BMP 格式),自动过滤非图像文件;导入视频文件(MP4、AVI 格式)时,可按 “固定帧间隔”(如每 10 帧提取 1 张图像)或 “手动选择帧” 提取人脸样本,适用于无实时摄像头场景。 数据集对接: 支持接入公开人脸数据集(如 LFW、ORL),通过预设脚本自动读取数据集目录结构(按 “用户 ID - 样本图像” 分类),快速构建训练样本库,无需手动采集,降低系统开发与测试成本。 2. 采集过程辅助功能 人脸有效性校验:采集时通过OpenCV的Haar级联分类器(或MTCNN轻量级模型)实时检测图像中是否包含人脸,若未检测到人脸(如遮挡、侧脸角度过大),则弹窗提示 “未识别到人脸,请调整姿态”,避免无效样本存入。 样本标签管理:采集时需为每个样本绑定 “用户标签”(如姓名、ID 号),支持手动输入标签或从 Excel 名单批量导入标签(按 “标签 - 采集数量” 对应),采集完成后自动按 “标签 - 序号” 命名文件(如 “张三
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老老老刘啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值