JavaScript语言精粹-读书笔记(4)

附录A 毒瘤

点击链接获取更多资料

全局变量

全局变量可能造成内存泄漏;大型程序中可能和另一个变量名冲突;可以被程序的任何部分在任何时间修改(降低了程序的可靠性)

定义全局变量的三种方法:在函数外部使用 var foo = value; 给全局对象window增加一个属性 window.foo = value; 使用未声明的变量(隐式全局变量,会造成很大的麻烦)

作用域

JS具有代码块,但是没有块级作用域。其他语言中,声明变量在第一次使用是,在JS中可以在每个函数开头部分声明变量。

自动插入分号

如果return后没有加分号,就会自动增加分号 return; 返回一个undefined

typeof

typeof(null) => Object 所以不能用这种方法检测null

可以使用 null === null (true) 检测null

对于正则表达式,大部分浏览器返回 object

parseInt

parseInt 会把字符串转化成整数,如果遇到非字符就会停止解析。parseInt(‘16 tons’) => 16.

s如果遇到的字符串第一个是0,parseInt 会按照八进制转换,这可能造成错误。

parseInt(‘089’) => 0

解决 parseInt(‘089’, 10) => 89 按照十进制进行转化。

加法

确保加法的两个数都是整数。如果计算货币需要圆角分,需要先转化成分进行计算(之后再还原成元)。

NaN

计算错误会产生NaN。如果一个计算结果是NaN,那么可能输入项或者计算过程中产生了NaN。可以使用 isNaN 判断。

isNaN('oop'); //true
isNaN('0'); //false
伪数组

JS 中的数组实际上是对象。不需要考虑越界的问题,但是性能比C语言中的数组差很多。判断数据不能使用 typeof,需要判断 constructor.

if (my_value && typeof(my_value) === 'object' && my_value.constructor === Array) {
  console.log('parameter is an array');
}

函数参数构成伪数组 arguments 不是一个数据,是一个对象,具有 length 属性。

hasOwnProperty 是对象的一个方法,可以判断对象内部是否有一个键;但是这个方法可以被更改(object.hasOwnProperty = null;),此时就会出错。

附录B 糟粕

避免使用 ==

两个等号比较时,如果变量类型不同会强制转换,这些规则很复杂。所以尽量避免使用两个等号,最好使用三个等号。

'' == '0' //false
0 == '' // true
0 == '0' // true

避免使用 with 语句

避免使用 eval 语句

避免在函数参数中传递字符串

减少使用 continue

减少使用 switch_case 穿越(两种情况对应一个结果,不写 return 语句。)这样在 JSLint监测效果不好

尽量使用代码块(if while) 避免因为换行程序错误。因为JS中空格不严格限制。

附录C JSlint

使用 JSLint 可以减少错误发生(代码行末加入分号等,避免语句错误)

使用 ++ — 避免在前面写空格,因为可能造成 + + 这样的错误

在选择结构中,JSLint不希望出现赋值语句。因为可能是比较语句(a == b) 少写了一个等号造成的赋值语句。

可以避免很多语法问题造成的潜在的bug。

这一点对于自己很有用。在自己的项目中最好可以这个库。

附录 JSON

JSON 主要用于不同语言数据交换。

JSON 对象可以被插入任何数据类型的值,对象可以无限层次的嵌套。但是最好的办法是扁平的数据。其他语言具有映射成JSON对象的数据类型。

可以使用 eval 函数把文本字符串转化成一个有用的数据结构,但是这种方法存在风险。

替代的方法是 JSON.parse 如果内部包含一个危险的数据,就会跑出一个错误。

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值