js DOM编程艺术 笔记

本文详细介绍了JavaScript的基本概念,包括变量的声明与赋值、数据类型、数组与对象的使用方法、基本操作符、条件与循环语句及函数的定义与调用等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

变量(variable)
mood="happy";把值存入变量的操作称为赋值,我把变量mood赋值为happy。把变量age赋值为33。
age=33;
一个变量被赋值后,我们就说该变量包含这个值,变量mood包含值happy。

js可以不先声明,但提前声明变量是一种良好的编程习惯

var mood;
var age;

你甚至可以一石二鸟,把声明变量和对该变量赋值一次完成
var mood="happy";
var age=33;

甚至可以这样
var mood="happy",age=33;

在js语句里,变量和其他语法元素的名字都是区分大小写的


js语法里不允许变量名中包含空格或标点符号,美元符号$除外

js变量名允许包含字母数字美元符号和下划线,(但第一个字符不允许是数字,)为了让比较长的变量名更容易阅读,可以在变量名中的适当位置插入下划线

var my_mood="happy";


另一种方式是使用驼峰格式(camel case)

每个新单词改用大写字母开头
var myMood="happy"; 通常驼峰格式是函数名,方法名和对象属性名命名的首选格式,
在上面这条语句中,单词happy是js语言中的一个字面量(literal),也就是可以直接在js代码中写出来的数据。

 

数据类型

js是弱类型语言,可以在任何阶段改变变变量的数据类型

1字符串
var mood="happy";
var mood='happy'; 可以随意选择引号,但最好根据字符串所包含的字符来选择,如果字符串包含双引号,就把字符串放在单引号里,如果字符串包含单引号,就把整个字符串放在双引号里。

var mood="don't ask";
里面有单引号需要用到转义(escaping) 在js里用反斜线对字符进行转义
var mood="don\'t ask";
类似的双引号包含一个本身就包含的双引号字符串 就必须用反斜线对字符串中的双引号进行转义
var height="about 5'10\"tall";

2数值
如果想给一个变量附一个值,不用限定它必须是一个整数,js允许使用小数点的数值,并且允许任意位的小数,这样的数称为浮点数(floating-point number)


也可使用负数,在数值前面加一个减号(-)表示它是一个负数
var a=-5;

 

也可是负浮点数
var a=-20.333333;

 


3布尔值 布尔类型(boolean)类型。


布尔值只有两个可选值 true或者false。

 


数组就是一个变量表示一组值的集合。


var beatles=Array(4); 数组用关键字Array声明,声明数组的同时还可以指定初始元素的个数,也就是这个数组的长度(length)
beatles是变量名,数组可以用关键字Array声明,
每个值都是数组的元素(element)。

beatles[0]="John"; 添加新元素 ,向数组中添加元素的操作称为填充(populating)。 填充元素时不仅要给一个值还要给出新元素在数组中存放位置,这个位置就是这个元素的下标(index)一个元素有一个下标,下标从0开始计数。
beatles[1]="Paul";
beatles[2]="George";
bealtes[3]="Ringo";


var beatles=array(); 如果不知道数组有多少个元素,可以在声明数组时不给出元素个数

如果嫌这样麻烦还可以这样,
var beatles=Array("John","Paul","George","Ringo"); 声明数组的时候同时对他进行填充,逗号把元素隔开,这个方式会为每个元素自动分配一个下标



还可以不明确的表明我们是在创建数组。只需要一对方括号把各个元素的初始值括起来就可以了。

var beatles=["John","Paul","George","Ringo"];


var year=[1940,1941,1942,1943]; 不必非得是字符串,可以把一些布尔值存入一个数组,可以把一组数值存入一个数组。

甚至可以把3种数据类型混在一起存入一个数组
var lennon=["John",1940,false];字符串,数值,布尔值




数组元素还可以是变量
var name="John";
beatles[0]=name; 这样把beatles的第一个元素赋值为"John"。




var name=["Ringo","John","George","Paul"] 数组元素的值还可以是另外一个数组元素,这样把beatles数组的第一个元素的值改为name数组里的第三个元素。
beatles[1]=name[3];

var lennon=["John","1940",false]; 事实上数组还可包含其他数组,数组中的任何一个元素都可以把一个数组作为它的值。
var beatles=[ ];
beatles[0]=lennon; 现在beatles的第一个元素的值是另外一个数组lennon。要想获得lennon数组里的某个元素的值需要两个方括号,

bealtes[0][0]的值是John,bealtes[0][1]的值是1940,bealtes[0][2]的值是false.




var lennon=Array(); 可以在填充数组时为每个新元素明确地给出下标来改变默认的行为 在为新元素给出下标时,不必局限于使用整数数字,你可以使用字符串
但是不推荐这样的写法,你创建的是Array对象的属性,因为这个写法改变了元素的类型。你给lennon添加了三个属性,你不应该修改Array对象的属性,
而应该使用通用对象(object)(关联数组
lennon["name"]="John";
lennon["year"]=1940;
lennon["living"]=false;



对象

对象和数组类似,都是使用一个名字表示一组值,对象的每个值都是对象的一个属性,
var lennon=object();
lennon.name="John"; John就是lennon.name的值。name是属性名
lennon.year=1940;
lennon.living=false;
与使用Array类似,创建对象使用object关键字,它不使用方括号和下标来获取元素,而是和任何js对象一样,使用点号来获取属性,



创建对象还有更简洁的写法

{属性名:值,属性名:值}


var lennon={name:"John",year:1940,living:false};


用对象来代替传统数组的做法意味着可以通过元素的名字而不是下标数字来引用他们,大大提高脚本可读性


var lennon={name:"John",year:1940,living:false};
var beatles=Array(); bealtes是数组,
beatles[0]=lennon; 用lennon来填充它的第一个元素,属性值从右赋值给beatles[0],
beatles[0].name 得到john


var lennon={name:"John",year:1940,living:false};
var beatles={}; 声明为对象
bealtes.vocalist=lennon; 声明为对象后就可以不用数字而是用更容易记忆的字符串值为下标
beatles.vocalist.name 获取lennon的数组里的元素, beatles.vocalist.name的值是John。

var lennon=["John"1940,false]
bealtes=[ ]; bealtes为数组
bealtes[0]=lennon; bealtes第一个元素的值是另外一个数组,想获得那个组里的值需要更多的括号
bealtes[0][0] 的值是John

操作(operation),js计算和处理数据

算术操作符(arithmetic operation)

赋值是=号
加法操作符是+号
减法操作符是-号
除法操作符是/号
乘法操作符是星号*



为了避免产生歧义 可以用括号把不同的操作符分隔开来
1+(4*5)
(1+4)*5

 


变量可以包含操作(operator)

var a=(1+4)*6;


还可以对变量进行操作
var temp_fahrenheit=95;
var temp_celsius=(temp_fahrenheit-32)/1.8


如果想给一个数值变量加1, year=year+1;
使用++操作符来达到同样的目的
year++

year--
year=year-1;

加号是比较特殊的操作符,既可以用于数值,也可以用于字符串,把两个字符串合二为一
var a="b"+"c" 这样把多个字符串首尾连在一起的操作叫拼接 (concatentaion)

这种拼接也可以通过变量来完成
var mood="happy";
var message="I am feeling"+mood 拼接

数值和字符串拼接在一起,因为js是弱类型语言,所以这种操作是允许的,此时,数值将被自动转换为字符串

var year=2005;
var message="The year is"+year;



alert("10"+20);字符串

alert(10+10);算术和


快捷操作符是+=,它可以一次完成加法和赋值
var year=2010;
var message="The year is";
message+=year; message=message+year

条件语句(conditional statement) 只有满足了条件才能执行


if语句(condition){
statements;

}
条件必须放在if语句后面的圆括号中标,条件的求值结果永远是一个布尔值,只能是ture或false。
花括号中的语句-不管它们有多少条,只有给定条件的求值结果是ture的情况下才会执行,。




如果if语句中的花括号只包含着一条语句,那就可以不使用花括号,而且这条if语句的全部内容可以写在同一行上,

if(1>2)alert("the world has gone mad!");
不过因为花括号可以提交脚本可读性,所以在if语句中总是使用花括号是个好习惯。





if(1>2){
alert("你好);
}else{ if语句可以有一个else子句,包含在else子句中的语句会在给定条件为假时执行
alert("你好啊);
}


比较操作符

js还提供了几乎只能在条件语句里的操作符,其中包括大于>,小于<,大于或等于>=,小于或等于<=,之类的比较操作符

如果想比较两个值是否相等,可以使用等于比较操作符。这个操作符由两个等号构成(==),单个等号是赋值,



如果在条件语句里的某个条件里使用了单个等于号,那么只要相应的赋值操作取得成功,那个条件的求值结果就将是true,
上面的错误在于变量my_mood赋值给变量my_ood,而不是比较它们是否相等,因为这个赋值操作总会成功,所以这条语句的结果将永远是true。
var my_mood="happy";
var you_mood="sad";
if(my_mood=you_mood){
alert("we both feel the same")
}



if(a=false){ 赋值运算并不是总返回真值 ,a等于false所以不执行alert语句
alert('hello,world'); 这条alert语句就不会执行。
}







js还提供了一个不等于比较的操作符(!=),它由一个感叹号和一个等号构成(!=),不等于就是ture,因为两个值不一样。
var my_mood="happy"; 所以运行alert语句。
var your_mood="sad";
if(my_mood!=your_mood){
alert("we're feeling different moods.");
}



var a=uu;
var b="";
if(a==b){ 结果为true,因为相等操作符认为空字符串与false的含义相同。空字符串就等于false。
alert("a equals b");
}



要进行严格的比较,就要使用===全等操作符,不仅比较值,而且会比较变量的类型。
var a=false; false是boolean," "是String字符串类型。所以不运行alert
var b="";
if(a===b){
alert("a dssdf b");
}


当然对于不等操作符!=也是如此。如果相比较严格不相等,就要使用!===。




逻辑操作符(operand)

判断一个数是不是在5-10之间。
var num=6;
if(num>=5 && num<=10 ) 如果是6 就会弹出alert,因为6>5 <10两个值都是true。
{
alert("aaaaaaaaaaaaaaaa");
}
这里使用了 逻辑与 操作符,它由两个&& 子符构成,是一个逻辑操作符

逻辑操作符的操作对象是布尔值。每个逻辑操作数返回一个布尔值true或者是false。

逻辑与 逻辑操作符只有在它的两个true时才会是true。



---------------------------------------------------------------------------------------------——————————————————

var num=11
if(num>10 || num<5){ 操作数中有一个true 所以运行alert
alert("the number is not in the right range");
}


逻辑或 操作符由两个垂直线字符构成(||),只要有一个是true,逻辑或 的操作就是true。

有两个是true,逻辑或 的操作就是true。

只有当它的两个操作数是false时,逻辑或 的操作才会是false。


——————————————————————————————————————————————

逻辑非 操作符它由一个感叹号 ( ! ) 单独构成。逻辑非 操作符只能作用于单个逻辑操作数,


if(!(1>2)){ 结果把那个逻辑操作数所返回的布尔值取反,如果那个逻辑操作数所返回的布尔值是true,
alert("All is well with ths world"); “逻辑非”操作符将把它取反为false。
}

上面这条语句把逻辑数放在了括号里,因为我想让逻辑非操作符作用于括号里的所有内容。



循环语句


if语句或许是最重要,最有用的条件语句。

if无法完成重复性的操作,

在if语句里,包含在花括号里的代码块只能执行一次。

如果需要多次执行同一个代码块就必须使用循环语句 while。

while 循环与if语句非常相似

while(条件){
语句;
}


它和if的区别是,只要给定的条件为true,花括号里的代码就将反复的执行下去,

下面是一个while循环的例子

var count=1;
while(count<11){
alert(count);
count++; count的值进行加1操作

}

while只要条件为true,就会不停的循环语句,直到控制循环的条件为false。如果条件不是false就会一直循环下去。变成死循环。
这里的关键是在while循环的内部必须发生一些会影响循环控制条件的事情,

比如在例子中,我们在while循环的内部对变量count的值进行了加1操作,

将导致循环控制条件在经过10次循环后值的结果为false ,10次循环 count的值变为11,11不小于11,

如果不增加count值就是一直是1,1永远小于11 ,这while循环将永远执行下去。


do ...while语句


希望那些包含在循环语句内部的代码至少执行一次
这时 do循环是我们的最佳选择。下面是do循环的语法

do{
语句
}while(条件);

do ..while是先循环语句,再判断条件,即使为false,仍然会弹出一次消息


var count=1;
do{
alert(count);
count++;

}while(count<11);
这个也是循环10次,在循环结束之后,变量的值是11.

 

 


for循环
用for循环来重复执行一些代码也很方便,它类似于while循环,
for循环是while循环的一种变体。

for(初始条件,测试条件,警报条件)

{
语句
}


for循环来重复执行一些代码好处是循环结构更加清晰,与循环有关的所以内容都包含在for语句的圆括号里,


for(var count=1;count<11;count++){
alert(count);
}

与循环有关的内容都包含在for语句的圆括号里,for循环最常见的用途之一是对某个数组里的全体元素

进行遍历处理。这往往需要用到array.length属性。array.length属性告诉我们数组里的元素个数, array.length数组下标
是从0开始。

var bealtes=Array("a","b","c","d") 0,1,2,3
for(var count=0;count<bealtes.length;count++){
alert(bealtes[count]);
}
这个例子弹出,4条 alert消息

函数


如果需要多次使用同一段代码,可以把他们封装成一个函数。

函数(function) 就是一组允许在你的代码里随时调用的语句,

每个函数实际上是一个短小的脚本。

function multiply(num1,num2){
var total=num1*num2;
alert(total);
}

multiply(10,2);


如果把两个数值传递给这个函数,这个函数将对它们进行乘法运算。


在命名变量时,我用下划线来分割各个单词,temp_fahrenheit
在命名函数时,我从第二个单词开始把每个单词的第一个字母写成大写形式(驼峰命名方法)covertToCelsius


变量的作用域
全局变量(global variable)和局部变量(local variable)

全局变量可以在脚本中的任何位置被引用,一旦你在某个脚本里声明了一个全局变量,就可以从这个脚本中的任何位置
包括函数内部引用它,全局变量的作用域是整个脚本。


局部变量,只存在于声明它的那个函数的内部,在那个函数的外部是无法引用它。局部变量的作用域仅限于某个特定的函数。


某个函数使用了var,那个变量就将被视为一个局部变量,它只存在于这个函数的上下文中,反之如果没有使用var,
那个变量就将被视为全局变量,


在定义一个函数时,我们一定要把它内部的变量全都明确地声明为局部变量。如果你总是在函数里使用var关键字来定义变量,就能避免任何形式的二义性隐患。

对象 (object)
是一种非常重要的数据类型,对象是自包含的数据集合,包含在对象里的数据可以通过两种形式访问属性(property)和方法(method);

属性就是属于某个特定对象的变量;

 

方法是只有某个特定对象才能调用的函数

对象就是由一些属性和方法组合一起的一个数据实体;在js里,属性和方法都使用点语法来访问
wang.yang属性

wang.li()函数

 

person对象名字

person.mood mood是person对象的属性

person.age age是person对象的属性

假如person对象还关联着一些诸如walk()和sleep()之类的函数,这些函数就是这个对象的方法,必须使用如下记号来访问他们

person.malk()
person.sleep()
这些属性和方法全部集合在一起我们就得到了一个person对象。


为了使用person对象来描述一个特定的人,需要创建一个person对象的实例(instance)
实例就是对象的具体个体,例如你和我都是人,都可以用person对象来描述,但你和我是两个不同的个体,很有可能有着不同的属性(比如你和我年龄可能不一样)
因此,你和我对应着两个不同的person对象,--它们虽然都是person对象,但他们是两个不同的实例。
为给定对象创建一个新实例需要使用new关键字,


var jeremy=new person; person对象的属性是jeremy,

上面这条语句将创建出person对象的一个新实例jeremy。我们就可以像下面这样利用person对象的属性来检索关于jeremy的信息了。
jeremy.age


jeremy.mood

内建对象

数组就是其中一种,当我们使用new关键字去初始化一个数组时,其实是在创建一个Array对象的新实例,

var bealtes=new Array();

当需要了解某个数组有多少个元素时,利用Array对象的length属性来获得这一信息
bealtes.length;

Array对象只是很多js内建对象中的一种,其他像Math对象和Date对象,它们分别提供了许多非常有用的方法供人们处理数值和日期值,
Math对象的round方法可以把十进制数值舍入一个与之最接近的整数,
var num=7.561;
var num=Math.round(num);
alert(num);


Date 对象可以用来存储和检索与特定日期和时间有关的信息,在创建Date对象的新实例时,js解释器将自动使用当前日期和时间对它进行初始化

var current_date=new Date();

Date对象提供getDay(),getHours(),getMonth()等一系列的方法, getDay是星期几 getHours是小时数 getMonth是月份



宿主对象
js脚本里使用一些已经预定义好的其他对象。这些对象不是由js语言本身而是由它的运行环境提供的。具体到web应用这个环境就
是由浏览器提供的预定义的对象被称为宿主对象(host object)

宿主对象包括Form Image Element 我们可以通过这些对象获得关于网页上表单 图像和各种信息等

转载于:https://www.cnblogs.com/wy936166601/p/9570736.html

基于数据挖掘的音乐推荐系统设计与实现 需要一个代码说明,不需要论文 采用python语言,django框架,mysql数据库开发 编程环境:pycharm,mysql8.0 系统分为前台+后台模式开发 网站前台: 用户注册, 登录 搜索音乐,音乐欣赏(可以在线进行播放) 用户登陆时选择相关感兴趣的音乐风格 音乐收藏 音乐推荐算法:(重点) 本课题需要大量用户行为(如播放记录、收藏列表)、音乐特征(如音频特征、歌曲元数据)等数据 (1)根据用户之间相似性或关联性,给一个用户推荐与其相似或有关联的其他用户所感兴趣的音乐; (2)根据音乐之间的相似性或关联性,给一个用户推荐与其感兴趣的音乐相似或有关联的其他音乐。 基于用户的推荐和基于物品的推荐 其中基于用户的推荐是基于用户的相似度找出相似相似用户,然后向目标用户推荐其相似用户喜欢的东西(和你类似的人也喜欢**东西); 而基于物品的推荐是基于物品的相似度找出相似的物品做推荐(喜欢该音乐的人还喜欢了**音乐); 管理员 管理员信息管理 注册用户管理,审核 音乐爬虫(爬虫方式爬取网站音乐数据) 音乐信息管理(上传歌曲MP3,以便前台播放) 音乐收藏管理 用户 用户资料修改 我的音乐收藏 完整前后端源码,部署后可正常运行! 环境说明 开发语言:python后端 python版本:3.7 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:pycharm
MPU6050是一款广泛应用在无人机、机器人和运动设备中的六轴姿态传感器,它集成了三轴陀螺仪和三轴加速度计。这款传感器能够实时监测并提供设备的角速度和线性加速度数据,对于理解物体的动态运动状态至关重要。在Arduino平台上,通过特定的库文件可以方便地与MPU6050进行通信,获取并解析传感器数据。 `MPU6050.cpp`和`MPU6050.h`是Arduino库的关键组成部分。`MPU6050.h`是头文件,包含了定义传感器接口和函数声明。它定义了类`MPU6050`,该类包含了初始化传感器、读取数据等方法。例如,`begin()`函数用于设置传感器的工作模式和I2C地址,`getAcceleration()`和`getGyroscope()`则分别用于获取加速度和角速度数据。 在Arduino项目中,首先需要包含`MPU6050.h`头文件,然后创建`MPU6050`对象,并调用`begin()`函数初始化传感器。之后,可以通过循环调用`getAcceleration()`和`getGyroscope()`来不断更新传感器读数。为了处理这些原始数据,通常还需要进行校准和滤波,以消除噪声和漂移。 I2C通信协议是MPU6050与Arduino交互的基础,它是一种低引脚数的串行通信协议,允许多个设备共享一对数据线。Arduino板上的Wire库提供了I2C通信的底层支持,使得用户无需深入了解通信细节,就能方便地与MPU6050交互。 MPU6050传感器的数据包括加速度(X、Y、Z轴)和角速度(同样为X、Y、Z轴)。加速度数据可以用来计算物体的静态位置和动态运动,而角速度数据则能反映物体转动的速度。结合这两个数据,可以进一步计算出物体的姿态(如角度和角速度变化)。 在嵌入式开发领域,特别是使用STM32微控制器时,也可以找到类似的库来驱动MPU6050。STM32通常具有更强大的处理能力和更多的GPIO口,可以实现更复杂的控制算法。然而,基本的传感器操作流程和数据处理原理与Arduino平台相似。 在实际应用中,除了基本的传感器读取,还可能涉及到温度补偿、低功耗模式设置、DMP(数字运动处理器)功能的利用等高级特性。DMP可以帮助处理传感器数据,实现更高级的运动估计,减轻主控制器的计算负担。 MPU6050是一个强大的六轴传感器,广泛应用于各种需要实时运动追踪的项目中。通过 Arduino 或 STM32 的库文件,开发者可以轻松地与传感器交互,获取并处理数据,实现各种创新应用。博客和其他开源资源是学习和解决问题的重要途径,通过这些资源,开发者可以获得关于MPU6050的详细信息和实践指南
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值