任务2学习感悟

本文介绍了JavaScript数据类型、数组操作、函数判断、深拷贝、数组去重、字符串处理、DOM元素操作、事件处理等基础知识,并通过示例代码演示了如何在网页中应用这些概念。
/**
 *  2. JavaScript数据类型及语言基础
 */

// 判断是否数组的函数
function isArray(arr) {
    // 利用Object.prototype.toString会返回各种内置类型,来判断返回的是不是'[object Array]'这里o小写
    return Object.prototype.toString.call(arr) == '[object Array]';
}

// 判断是否函数的函数
function isFunction(fn) {
    // 注意typeof()返回的是6个字符串
    return typeof(fn) == 'function';
}

// 深拷贝的函数
function cloneObject(src) {
    // 只有object和array里,for-in才能获取到参数
    // 注意返回的是'[object Array]'后面大写
    if (Object.prototype.toString.call(src).slice(8, -1) === 'Object'
        || Object.prototype.toString.call(src).slice(8, -1) === 'Array') {
        // 判断是Object还是Array
        var result = src instanceof Object ? {} : [];
        for (var i in src) {
            if (src.hasOwnProperty(i)) {
                // 对象或数组里面,继续遍历来获取,直到属性值为非Object或Array
                result[i] = cloneObject(src[i]);
            }
        }
        return result;
    }
    // 原始类型和Date, Boolean等对象类型直接返回就好了
    else {
        return src;
    }
}


// 数组去重,返回去重后的数组
function uniqArray(arr) {
    var array = [];
    for (var i = 0, len = arr.length; i < len; i++) {
        if (array.indexOf(arr[i]) === -1) {
            array.push(arr[i]);
        }
    }
    return array;
}


// 对字符串首尾进行空格字符的去除,返回去除后的字符串
function trim(str) {
    var pattern = String('\t\r\n');
    if (pattern.indexOf(str.charAt(0)) != -1) {
        return trim(str.substring(1));
    }
    else {
        return str.substring(0);
    }
}
var s = '   hi';
console.log(trim(s));

function trim(str) {
    return str.replace(/^(\s)*(\s$)*/, '');
}
console.log(trim('   hi   '));


function each(arr, fn) {
    for (var i = 0, len = arr.length; i < len; i++) {
        fn(arr[i], i);
    }
}
var arr = ['java', 'c', 'php', 'html'];
function output(item) {
    console.log(item)
}
each(arr, output);  // java, c, php, html


// 获取一个对象里面第一层元素的数量,返回一个整数
function getObjectLength(obj) {
    var count = 0;
    for (var key in obj) {
        if (obj.hasOwnProperty(key)) {
            count++;
        }
    }
    return count;
}
// 使用示例
var obj = {
    a: 1,
    b: 2,
    c: {
        c1: 3,
        c2: 4
    }
};
console.log(getObjectLength(obj)); // 3


// 判断是否为邮箱地址
function isEmail(emailStr) {
    // 邮箱可以为[数字,字母,-,_]
    return emailStr.match(/^[a-zA-Z0-9-_]+@[a-zA-Z0-9-_]+[.a-zA-Z0-9-_]/g)===-1?false:true;
}
// 使用示例
isEmail('18810544291@163.com');


// 判断是否为手机号
function isMobilePhone(phone) {
    return phone.search(/^1\d{10}/g)===-1?false:true;
}
// 使用示例
isMobilePhone('18810544291');


/**
 * 3.DOM
 */
// 为element增加一个样式名为newClassName的新样式
function addClass(element, newClassName) {
    // document.querySelector(selecttor) 返回第一个匹配css选择器的对象
    // document.querySelectorAll(selectors) 返回一组匹配css选择器的对象
    // element有个className属性
    document.querySelector(element).className += ' ' + newClassName;
}
// 使用示例
var element = '.first';
addClass(element, 'newClass');// 注意newClass前面的空格


// 移除element中的样式oldClassName
function removeClass(element, oldClassName) {
    // 由于replace不改变原字符串,而是返回改变后的字符串,所以要重新赋值
    document.querySelector(element).className = document.querySelector(element).className.replace(oldClassName, '');
}

// ife中xyc的方法,有classList和remove两个新方法
// 其中remove方法并不是数组里的,好像是DOM的
function removeClass(element, oldClassName) {
    document.querySelector(element).classList.remove(oldClassName);
}

// 判断siblingNode和element是否为同一个父元素下的同一级的元素,返回bool值
function isSiblingNode(element, siblingNode) {
    var isSiblingNode = false;
    // 利用parentNode和childNodes来获得其父元素的全部子元素
    var parent = document.querySelector(element).parentNode.childNodes;
    var sib = document.querySelector(siblingNode);
    for (var i = 0, len = parent.length; i < len; i++) {
        if (sib=== parent[i]) {
            isSiblingNode = true;
        }
    }
    return isSiblingNode;
}
// 参考xyc的方法,虽然return false放在后面,好像总会返回false.但是在for中返回true就直接退出了
function isSiblingNode(element, siblingNode) {
    // 利用parentNode和childNodes来获得其父元素的全部子元素
    var parent = document.querySelector(element).parentNode.childNodes;
    var sib = document.querySelector(siblingNode);
    for (var i = 0, len = parent.length; i < len; i++) {
        if (sib=== parent[i]) {
            return true;
        }
    }
    return false;
}


// 获取element相对于浏览器窗口的位置,返回一个对象{x, y}
function getPosition(element) {
    var position = {};
    position.x = document.querySelector(element).offsetLeft;
    position.y = document.querySelector(element).offsetTop;
    return position;
}


// 实现一个简单的Query
// getElementById不用#
function $(selector) {
    // 如果里面包含空格,则是组合查找
    if (selector.indexOf(' ') !== -1) {
        var parent = $(selector.split(' ')[0]);
        var child = $(selector.split(' ')[1]);
        for (var i = 0; i < parent.childNodes.length; i++) {
            if (child === parent.childNodes[i]) {
                return parent.childNodes[i];
            }
        }
    }
    // id查找
    if (selector.charAt(0) === '#') {
        return document.getElementById(selector.slice(1));
    }
    // 类查找
    else if (selector.charAt(0) === '.') {
        var className = selector.slice(1);
        var tags = document.getElementsByTagName('*');
        for (var i in tags) {
            if (tags[i].nodeType === 1) {
                if (tags[i].className.search(className) !== -1) {
                    return tags[i];
                }
            }
        }
    }
    // 属性查找
    else if (selector.charAt(0) === '[') {
        var attr = selector.slice(1, -1);
        var tags = document.getElementsByTagName('*');
        // 找有值的属性的元素
        if (attr.indexOf('=') !== -1) {
            var name = attr.split('=')[0];
            var value = attr.split('=')[1];
            for (var i in tags) {
                if (tags[i].nodeType === 1) {
                    if (tags[i].getAttribute(name) === value) {
                        return tags[i];
                    }
                }
            }
            return false;
        }
        // 找包含某属性的元素
        else {
            for (var i in tags) {
                if (tags[i].nodeType === 1) {
                    if (tags[i].getAttribute(attr) !== null) {
                        return tags[i];
                    }
                }
            }
            return false;
        }
    }
    else {
        return document.getElementsByTagName(selector)[0];
    }
}

/**
 * 4.事件
 */















1. JS居然有原生的document.querySelector(selector)和document.querySelectorAll(selector)两个原生的找DOM元素的方法

2. 谨记string.slice(from, to)方法

3. string.replace()不会修改原字符串

4. 用document.querySelector(selector).classList.remove()这个remove('className').这里的remove()方法能移除classList数组中对应class.但不是数组提供的方法.应该是DOM的


本指南详细阐述基于Python编程语言结合OpenCV计算机视觉库构建实时眼部状态分析系统的技术流程。该系统能够准确识别眼部区域,并对眨眼动作与持续闭眼状态进行判别。OpenCV作为功能强大的图像处理工具库,配合Python简洁的语法特性与丰富的第三方模块支持,为开发此类视觉应用提供了理想环境。 在环境配置阶段,除基础Python运行环境外,还需安装OpenCV核心模块与dlib机器学习库。dlib库内置的HOG(方向梯度直方图)特征检测算法在面部特征定位方面表现卓越。 技术实现包含以下关键环节: - 面部区域检测:采用预训练的Haar级联分类器或HOG特征检测器完成初始人脸定位,为后续眼部分析建立基础坐标系 - 眼部精确定位:基于已识别的人脸区域,运用dlib提供的面部特征点预测模型准确标定双眼位置坐标 - 眼睑轮廓分析:通过OpenCV的轮廓提取算法精确勾勒眼睑边缘形态,为状态判别提供几何特征依据 - 眨眼动作识别:通过连续帧序列分析眼睑开合度变化,建立动态阈值模型判断瞬时闭合动作 - 持续闭眼检测:设定更严格的状态持续时间与闭合程度双重标准,准确识别长时间闭眼行为 - 实时处理架构:构建视频流处理管线,通过帧捕获、特征分析、状态判断的循环流程实现实时监控 完整的技术文档应包含模块化代码实现、依赖库安装指引、参数调优指南及常见问题解决方案。示例代码需具备完整的错误处理机制与性能优化建议,涵盖图像预处理、光照补偿等实际应用中的关键技术点。 掌握该技术体系不仅有助于深入理解计算机视觉原理,更为疲劳驾驶预警、医疗监护等实际应用场景提供了可靠的技术基础。后续优化方向可包括多模态特征融合、深度学习模型集成等进阶研究领域。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
深度学习是一种强大的机器学习技术,它模仿人类大脑神经网络的工作原理,能够处理复杂的数据结构和模式识别。在深入探讨深度学习学习感悟之前,我们先要了解几个关键概念: 1. **神经网络**:深度学习的核心是多层的神经网络,每层包含许多节点(或称为神经元),它们通过权重连接进行信息传递和处理。 2. **梯度下降法**:优化算法,用于调整网络中权重,以最小化损失函数,是训练过程中的关键步骤。 3. **反向传播**:用于计算网络中每个参数对损失函数的影响,是实现高效梯度更新的重要机制。 4. **数据的重要性**:深度学习模型的成功很大程度上依赖于大量高质量的数据。数据集的质量和多样性对于模型的泛化能力至关重要。 5. **过拟合和欠拟合**:理解这两个概念可以帮助调整模型复杂度,避免模型过于复杂导致的过拟合,或过于简单导致的欠拟合。 **深度学习学习感悟**: 1. **迭代与耐心**:深度学习模型训练是一个迭代过程,可能需要大量的时间和计算资源。耐心等待模型收敛,以及适时调整参数,是成功的基石。 2. **理论与实践结合**:理论知识是基础,但实际操作中会遇到各种问题,如数值稳定性、硬件限制等。通过解决这些问题,理解和掌握深度学习更加全面。 3. **问题分解**:复杂任务往往能通过设计简单的模块组合而成,这体现了深度学习的层次化和模块化的思考方式。 4. **理解数据**:数据预处理和特征工程是提升模型性能的关键,理解数据分布、异常值和噪声对于模型设计至关重要。 5. **不断探索新模型**:随着深度学习的发展,不断有新的架构出现,如卷积神经网络(CNN)、循环神经网络(RNN)和Transformer等。了解并尝试这些新技术,有助于拓宽视野。 6. **跨领域应用**:深度学习广泛应用于语音识别、图像识别、自然语言处理等领域,不断跨界尝试可以发现更多应用场景和商业价值。 **相关问题--:** 1. 你能举一个实际应用深度学习的例子吗? 2. 如何避免深度学习模型中的过拟合问题? 3. 在深度学习项目中,如何选择合适的优化器? 4. 当面对大量数据时,如何有效地进行数据增强? 5. 你能解释一下Transformer模型与传统RNN的不同之处吗?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值