3.15

typeof运算符

用于确定当前变量的值是什么数据类型。

    console.log(typeof 123); // number
    console.log(typeof '123'); // string
    console.log(typeof true); // boolean
    console.log(typeof test); // function
    console.log(typeof undefined); // undefined
    console.log(typeof [1,2,3]); // object
    console.log(typeof {}); // object
    console.log(typeof null); // object

数组的类型也是object,这说明在Javascript中,数组本质上只是一种特殊的对象。

数值类型

整数和浮点数

在Javascript内部,所有的数字都是以64位浮点形式存储的,即便是整数也是如此,所以,在Javascript中1 和1.0,是同一个数字。

console.log(1 === 1.0); // true

由于浮点数不是精确的值,所以在计算的时候要特别的小心。

console.log(0.1 + 0.2 === 0.3); // false
console.log(0.3 / 0.1); // false

遗留问题:至于浮点数为什么不能表示精确的值,自己找相关的资料。
Javascript所能表示的数值范围:

    console.log(Number.MAX_VALUE); // 1.7976931348623157e+308
    console.log(Number.MIN_VALUE); // 5e-324

遗留的问题:数值的表示方法,16进制、8进制、科学计数法等。
关于+0和-0的概念(在Javacript中任何一个数都有一个负值,0也不例外)

    console.log(+0 === -0); // true
    console.log(1 / +0); // +Infinity
    console.log(1 / -0); // -Infinity
    console.log(1 / +0 === 1 / -0); // false

NaN(Not a Number)

主要出现在将字符串错误的解析为数字。

    console.log(5 - 'x'); // NaN
    console.log(0 / 0); // NaN
    console.log(Math.sqrt(-9)); // NaN

3.与数值类型相关的几个全局方法

parseInt():把字符串解析为整数,要注意的是,字符串在解析为整数的时候,是一个个字符解析的,如果遇到不能转为数字的字符,就不再解析下去,返回已经解析完成的字符数字。

      	console.log(parseInt('12px')); // 12
    	console.log(parseInt('012')); // 12
    	console.log(parseInt(' 12')); // 12
        console.log(parseInt('12  abc 12')); // 12

parseFloat():概念同parseInt

字符串

字符串是一个或多个排在一起的字符,可以用单引号和双引号包裹。
在单引号包裹的字符串内部可以使用双引号,同样的,在双引号包裹的字符串内部也是可以使用单引号。

    console.log("hello,'world'!");
    console.log('hello,"world"!');

在源代码中如果需要使用多行字符串,我们一般使用 + 或者 \ ,但是一般都是使用 + 拼接。

	console.log('hello,world!' +
    'hello,world!' +
    'hello,world!hello,world!');
  

转换为字符串

有两种方式转换为字符串

  • toString()方法:几乎每一个值都有toString()方法,除了null和undefined 。
  • String()方法:此方法可以将几乎所有类型的值转化为字符串。
		//几乎每个值都有toString方法,除了null和undefined
		  var age = 11;
		  var ageText = age.toString();
		  console.log(ageText+1);
		  var found = true;
		  var foundText = found.toString();
		  console.log(foundText);
          
          var value1 =10;
		  var value2 = true;
		  var value3 = null;
		  var value4;
	     //String()函数能将任何类型的
		  console.log(String(value1));
		  console.log(String(value2));
		  console.log(String(value3));
		  console.log(String(value4));

3.字符串和数组

字符串可以理解为一个特殊的字符类型的数组,因此可以使用数组的中括号返回某个索引位置的字符。但是不能通过索引位置赋值。


    var h = "hello";
    h[0] = "w"; // 此处不会修改h[0]的值
    console.log(h); // hello
    h.length = 7;
    console.log(h.length); // 5

布尔类型

在Javascript的boolean类型中,除true和false表现真假外,0也可以表示假,非0表示真。

函数

函数是一段可以反复调用的代码块,函数区别于代码块最显著的特征就是可以有输入参数,根据不同的输入参数,可以返回不同的结果。

函数的声明

函数的声明有三种方式,常用的前两种。
function命令
function 命令后面是函数名,函数名后面是一对圆括号,里面是传入的参数。

// 函数的声明或者叫函数的定义
function p(str) {
   console.log(str);
}
// 调用函数
p("abc");

函数表达式
用变量赋值的写法去声明一个函数。

var print = function(str) {
   console.log(str);
};
print("xxxx");

在上述代码中,在赋值预算符=右边的函数,是没有名字的,我们把这种类型的函数也称之为匿名函数,匿名函数有时我们也叫做函数表达式。

在通过函数表达式定义一个函数的时候,在语句后面要加上“;”。

2.第一等公民

  • JavaScript将函数看做一个值,与其他类型的值(数值、字符串、布尔值等)地位相同。
  • 凡是可以使用值的地方都可以使用函数,可以把函数赋值给变量或对象的属性。
  • 也可以当做参数传递给其他函数,或者作为函数的结果返回。函数只是一个可执行的值,此外并无特殊之处。
function add(x, y) {
   return x + y;
}
var add = function(x, y) {
   return x + y;
};
var oper = add;
print(oper(2,2)); // 4
function a(op) {
   return op;
}
print(a(add)(1,2)); // 3

var o2 = {
   name : "Tom",
   add : add
};
print(o2.add(3,3)); // 6

3.函数名的提升

Javascript引擎将函数名视同变量名。所以采用function命令声明函数时,整个函数就会像变量声明一样,提升到代码头部。

		// console.log(aaa);
		// var aaa = 'bbb';
		a();
		function a(){
			console.log('a');
		}

4.函数的属性和方法

  • name属性:输入函数的名字
  • length属性:输入函数参数的个数
  • toString()方法:返回函数的源码
print("add.name=" + add.name);
print("add.length=" + add.length);
print("add.toString()" + add.toString());

5.函数的作用域

作用域(scope)称之为变量存在的范围。
在Javascript中只有两种作用域,一种是全局作用域:即变量在整个程序中一直存在,所有的地方都可以读取。
另一种叫函数作用域:即变量只在函数内部存在。

var i = 0; // 这里的i是全局变量,可以在页面的任何位置引用
function t() {
   var j = 0;
   console.log("j=" + j);
   console.log("i=" + i);
}
// console.log("out j = " + j); 
// 此处代码会报错,j is not defined
t();

6.参数

函数在运行的过程中,有时需要提供外部数据,不同的外部数据可能会得到不同的结果,我们把这种外部数据叫做参数。需要特别注意的时,在Javascript语言中是不需要指定参数的数据类型的。

function p(str) {
   console.log(str);
}

参数的省略
在javascript中,函数的参数不是必须的,Javascript可以省略。

function p(str, flag) {
   console.log("str=" + str);
   console.log("flag=" + flag);
}
console.log("=======================");
p("hello");
console.log("=======================");
p("hello",true);
console.log("=======================");
p();
console.log("=======================");

被省略的参数的值变成“undefined”;
但是,没有办法只传递靠后的参数,省略靠前的参数,可以通过显示的传入undefined。

关于默认值的实现

function f(a) {
   a = a || 1;
   console.log("a:" + a);
}
f(); // 1

7.传递方式

函数参数如果是原始数据类型(数值、字符串、布尔型),都是传值传递,如果在函数体内修改了变量的值,不会影响到函数体外。

function f(o) {
   o = 5;
   console.log("o=" + o);
}
var i = "abc";
f(i);
console.log("i=" + i); // abc

但是,如果函数的参数是复合数据类型的值(数组、对象、函数等),传递方式是引用传递。也就是说,在函数内部修改了原对象的值,会影响到原来的值。

function fo(oj) {
    oj.name = "Jack";
    console.log("oj.name=" + oj.name);
}
var obj = {
   name : "Tom",
   age :20
};
fo(obj);
console.log("obj.name=" + obj.name); // Jack

数组

数组是按次序排列的一组值。每个值的位置都有编号(从0开始的)。整个数组用方括号表示。

数组的元素可以是不同的数据类型。
如果数组中的元素也为数组,那么就构成了一个二维数组

var arr = ['a','b','c'];
var arr2 = [];
arr2[0] = 'a';
arr2[1] = 'b';
arr2[2] = 'c';
var arr3 = ['a',12,true,{name:"Tom",age:18}];
console.log(typeof arr3[2]); // boolean

var arr4 = [[1,2],[3,4]];
console.log(arr4[1][0]); // 3

1. 数组的本质

本质上,数组就是一个对象。通过typeof运算符返回的类型就是object。

console.log(typeof arr4); // object
console.log("arr['1']=" + arr['1']); // b
console.log(Object.keys(arr)); // ["0", "1", "2"]

2.length属性

length属性返回的是数组的成员数量。
Javascript使用32位整数保存数组的元素个数,所以length的最大值为232-1。
只要是数组,就有length属性,而且length属性是一个动态的值,该值等于键名中的最大整数+1。

清空一个数组比较有效的方法就是设置length=0

var arr5 = [1,2,3,4,5];
console.log(arr5.length); // 5
arr5[100] = 100;
console.log(arr5.length); // 11
console.log(arr5[7]);

var arr6 = [1,2,3,4];
console.log(arr6[3]); // 4
arr6.length = 3;
console.log(arr6[3]);

for...in循环和遍历数组

var arr6 = ['a','b','c','d'];
arr6.score = 98;
for (var i  in arr6) {
   console.log(arr6[i]); // a b c d 98
}

通过for...in遍历数组的时候,会把非数字键的属性也遍历出来,所以不推荐使用for...in遍历数组

我们一般还是使用for或while循环去遍历数组

for (var i = 0; i < arr6.length; i++) {
   console.log("arr6[" + (i) + "]=" + arr6[i]);
}

var i = 0;
while (i < arr6.length) {
    console.log("arr6[" + (i) + "]=" + arr6[i]);
    i = i + 1;
}

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 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、付费专栏及课程。

余额充值