语句、变量等js最基本知识
JavaScript的最为基本知识
1语法
js是区分大小写的;标识符就是指变量、函数、属性的名字或者是参数,标识符可以是字母,下划线,美元符号,数字,注意第一个不能是数字;js采用的是驼峰大小格式;js的单行和多行注释;严格模式下直接“use strict”即可。关键字和保留字,比如break,case等等。
变量:js的变量类型是松散型的,即可以保留任何类型的数据,每个变量仅仅是个占位符,var 声明变量为局部变量,没有var的即为全局变量。
2数据类型
js的数据类型有五种简单的数据类型undefined,string,number,Boolean,null,还有一个复杂的数据类型object,由于js具有动态性,所以足以应付。
typeof操作符,检测数据类型,当然还能检测到function,注意:检测到为object时可能是对象可能是null
2.1undefined类型
只有一个值undefined,使用var声明变量,但是没有对其初始化,即为undefined,没有声明的变量会报错,注意:但是用typeof进行检测却为undefined,所以需要的变量一定先声明。
2.2null类型
只有一个值null,是一个空对象指针,所以typeof会检测为object,如果声明好的变量要保存为对象,最好保存为null比较好
2.3Boolean类型
有两个字面量为true和false,但是js中的所有类型都可以转为对应的Boolean值,用转型函数Boolean()即可,
string类型的任何非空字符串,number类型的任何非零数字值,object任何对象都为true
string类型的空字符串,number类型的0和NaN,和null都为false
这种转换对于流程控制语句比如(if条件语句)会自动的执行相应的Boolean转换
2.4number类型
使用IEEE754格式表示整数和浮点数
浮点数值:必须包含一个小数点并且小数点后必须至少有1个数字,浮点数值的内存空间为整数数值的两倍所以js会对其转换比如10.0会自动转为整数值;浮点数的计算精准度比较低比如0.1+0.2!=0.3,不要测试某个特定的浮点数值。
数值范围:存在无限大和无限小,测试某个值是不是有穷的用isFinite()
NaN:not a number,NaN与任何值都不相等包括NaN本身
数值转换:有3个函数可以将非数值转换为数值类型,为Number(),parseInt(),parseFloat()。Number()可以用于任何数据类型,而后俩个则专门应对字符串的。
Number()的转换
var num1=Number("hello") //NaN
var num6=Number(undefined) //NaN
var num2=Number("") //
var num3=Number(null) //
var num4=Number("0001") //
var num5=Number(true) //
面对string时,整数常常用parseInt(),只会得到前面的整数,八进制和十六进制,
parseInt的转换
var num1=parseInt("123blue") //
var num2=parseInt("") //NaN
var num3=parseInt("070") //八进制的56
var num4=parseInt("70") //
var num5=parseInt("0xf") //十六进制的15
var num1=parseInt("10",2) //2按照2进制解析
小数用parseFloat,始终忽略前面的0,只有第一个小数点为有效的,只解析十进制
2.5string类型
字符串,单引号或者双引号
转义序列:\n表示换行,\t表示制表等等,看做一个字符来解析
转换为字符串:toString()方法,数值,布尔值,对象,字符串值,都有toString()方法,但是null,undefined没有;调用数值时可以用 toString(2)表示进制。当然可以使用String()转型函数,当不知道是不是null和undefined时候,
2.6object类型
js的对象是一组数据和功能的集合,可以通过new操作符创建,object每个实例都有以下属性和方法
constructor保存用于创建当前函数的对象
hasOwnProperty()用于检查给定的属性在当前对象实例中是否存在,参数属性名必须以字符串表示
isPrototypeOf()用于检查传入的对象是否是当前对象的原型
toLocaleString()返回对象的字符串表示
toString()返回对象的字符串表示
valueOf()返回对象的字符串、数值、布尔值表示
3操作符
操作符包括算术操作符、位操作符、关系操作符、相等操作符,可以适用于很多值,数值,字符串,布尔,对象,当应用于对象时,会将转为valueOf()和toString()方法取得操作的值
3.1一元操作符
只能操作一个值
递增递减操作符
分为前置型和后置型,比如i++和++i等等,前置的递增递减,变量的值都是在语句被求值以前被改变的;后置型的递增递减,变量值在语句被求值以后被改变的
var num1=2
var num2=20
var num3=num1--+num2 //
var num4=num1+num2 //
一元加和一元减操作符
一元加,没什么效果;一元减则是负数了
位操作符不说
布尔操作符
非,与,或
非:返回一个布尔值,然后求反;null,undefined,NaN都返回true
与:都是布尔值时,一个为true则为true,都是false才为false;
或:一个为true则为true
乘性操作符
乘法* 除法/ 求模%
加性操作符
普通的加法即为加法,当操作数为字符串时:两个都是则直接连接一起,一个是字符串,则另一个转为字符串再连接一起
当有一个操作数为对象,数值,布尔值时,则调用他们的toString()方法取得相应的字符串值,再连接,对于null和undefined则调用String()方法取得的是null和undefined
注意:每个加法是独立操作的,按照顺序的,所以加性操作的时候要注意括号括起来
var age=25
var sex="25"
var name=true
var one=null
var two=undefined
console.log(age+sex) //
console.log(age+name) //25true
console.log(age+one) //
console.log(name+one) //truenull
console.log(one+two) //NaN
减法:当有一个操作数为字符串,数值,布尔值,null,undefined时,则调用他们的Number()方法取得相应的字符串值;当有个操作符为对象时,则调用对象的valueOf()方法,否则为String()方法
var age=25
var sex="25"
var name=true
var one=null
var two=undefined
console.log(age-sex) //
console.log(age-name) //NaN
console.log(age-true) //
console.log(age-one) //25 null转为0
关系操作符
两个都是数值则直接比较数值;都是字符串则比较字符串编码;一个是数值则另一个转为数值;一个是对象,则调用valueOf()方法,toString()方法,布尔值转换为数值
var num1=23>3
var num2="23">"3"
var num3="23">3
var num4="Abc">"abc"
var num5=true>false
var num6=NaN<3
console.log(num1) //true
console.log(num2) //false
console.log(num3) //true
console.log(num4) //false
console.log(num5) //true
console.log(num6) //false NaN无法比较都是false
相等操作符
相等和不相等,全等和不全等,区别在于是否进行数据类型的转变在做比较判断
相等操作符会先强制转换,布尔值则先转为1和0;一个为字符串和数值,则先转为数值;一个为对象则先调用valueOf()方法;null和undefined是相等的,NaN不等于NaN,都是对象则比较是否为同一对象
全等操作符则不会强制转换,保留原有的数据类型,“55”!==55
条件操作符
var max=(num1>num2)?num1:num2;
赋值操作符
age+= age*=等等之类
逗号操作符
声明多个变量;用于赋值时,返回表达式的最后一项
4语句
条件语句
if语句:if条件语句,内为布尔值的判断
switch语句:一般多种情况的讨论,避免if语句的累积,也是布尔值的判断
var i=5;
switch(i){
case 1:
//合并两种情况,所以没有break,一般情况下都要带的
case 2:
console.log("hello");
break;
case 3:
console.log("hello");
break;
case 4:
console.log("hello");
break;
case 5:
console.log("hello");
break;
case 6:
console.log("hello");
break;
default: //不匹配时的情况
console.log("world");
} switch("hello"){ //switch语句中可以是数值,字符串,对象;case值也可以是常量,变量甚至表达式
case "hello":
console.log("hello is founded");
break;
case "world":
console.log("world is founded");
break;
default:
console.log("nothing");
} var i=7;
switch(true){ //之所以可以传递true,因为每一个case返回的是布尔值,switch语句中比较是全等操作符,所以不会是"99"与99相等
case i<10:
console.log("i<10");
break;
case i>10:
console.log("i>10");
break;
default:
console.log("i=10");
}
循环语句
一般来说:for循环适合已知的循环次数,while循环适合未知的循环次数。
do-while语句:后测试循环语句,这个循环至少执行一次;
while语句:前测试循环语句;
var i=0;
while(i<=100){
i++ i++一定要有的,否则这就是个死循环
}
console.log(i) // var j=0;
do{
j++
}while(j<=100)
console.log(j) //101 循环至少先执行一次
计算1——100之间的和
var sum=0;
var summ=0;
var n=1;
while(n<=100){
sum+=n;
n++
}
console.log(sum) // for(var i=1;i<=100;i++){
summ+=i
}
console.log(summ) //
计算1——100之间奇数的和
var sum=0;
for(var i=1;i<=100;i+=2){
console.log(i)
sum+=i
}
console.log(sum) // var summ=0;
var j=1;
while(j<=100){
if(j%2==1){
console.log(j)
summ+=j
}
j++
}
console.log(summ) //
for语句:前测试循环语句,具有初始化变量和定义循环后要执行代码的能力;由于js不存在块级作用域,所以循环内部定义的变量也可以在外部访问;
for(语句一;语句二;语句三)语句一为初始化变量,首先执行;语句二为循环的条件判断;语句三是对变量的增值,在循环代码块执行后才执行;
执行的顺序:语句一先经过语句二判断然后进入循环(这里不会经过语句三),执行循环后再执行语句三,再语句二,再进入循环
for(var i=1;i<=100;i++){
console.log(i) //1——100
}
alert(i) //101
for(var i=99;i>=1;i-=2){
console.log(i) //99,97……1
}
alert(i) //-1
循环的嵌套:外层循环为假,内层循环不执行;先执行外层再执行内层,直到内层为假时才返回外层执行
for(var i=1;i<=3;i++){
console.log(i)
for(var j=1;j<=5;j++){
console.log(j)
}
}
for-in语句:精准的迭代语句,用来枚举对象的属性;在枚举之前检测迭代的变量值不是null或undefined
for(var propName in window){
console.log(propName)
}
label语句:添加标签,一遍将来使用
start:for(var i=0;i<3;i++){
alert(i)
}
break和continue语句:在循环中精准的控制代码的执行
break语句直接退出循环,执行循环之后的代码
continue直接退出本次循环,重新执行下一次的循环
var num=0;
for(var i=1;i<10;i++){
if(i%5==0){
break //直接退出此次循环
}
num++
}
alert(num) //4
var num=0;
for(var i=1;i<10;i++){
if(i%5==0){
continue //不会执行后面操作,会从循环顶部重新的开始
}
num++
}
alert(num) //8
注意:在分辨循环前,首先看循环的范围到底是什么,然后再看里面的代码块。break和continue会和label联合使用,从而返回代码中特定的位置,常常发生在循环嵌套的情况下
以下讨论break和continue以及label的用法:
var numb=0;
for(var i=0;i<10;i++){
for(var j=0;j<10;j++){
if(i==5&&j==5){
break //这里的break只是退出了内部循环,忽略了55,56,57,58,59,当i=6时又为正常
}
numb++
}
}
alert(numb) // var numb=0;
output:
for(var i=0;i<10;i++){
for(var j=0;j<10;j++){
if(i==5&&j==5){
break output //由于有label的缘故,直接退出整个大循环
}
numb++
}
}
alert(numb) //
var numb=0;
for(var i=0;i<10;i++){
for(var j=0;j<10;j++){
if(i==5&&j==5){
continue //这里的continue只是当i,j为5时重新下一次循环
}
numb++
}
}
alert(numb) // var numb=0;
output:
for(var i=0;i<10;i++){
for(var j=0;j<10;j++){
if(i==5&&j==5){
continue output //由于有label的缘故,直接退出整个大循环55,56,57,58,59直接忽略,然后重新
}
numb++
}
}
alert(numb) //
with语句
将代码的作用域设置到一个特定的对象中,简化多次编写同一个对象的工作;width内的变量都为局部变量,当局部环境找不到变量的定义,会从location对象的属性中查找,如果有则可以的。由于调试困难和性能下降,不建议大量使用
var qs=location.search.substring(1);
var hostname=location.hostname;
var url=location.href; with(location){ //由于上述代码都包含对象location,所以说用width来简化
var qs=search.substring(1);
var hostname=hostname;
var url=href;
}
基础不牢,地动山摇
语句、变量等js最基本知识的更多相关文章
- css+js+html基础知识总结
css+js+html基础知识总结 一.CSS相关 1.css的盒子模型:IE盒子模型.标准W3C盒子模型: 2.CSS优先级机制: 选择器的优先权:!important>style(内联样式) ...
- 出去就餐并且理解Express.js的基本知识
Going out to eat and understanding the basics of Express.js出去就餐并且理解Express.js的基本知识 原文:Going out to e ...
- mysql语句在node.js中的写法
总结一下mysql语句在node.js中的各种写法,参考了npm网站mysql模块给的实例. 查询 select //1 db.query('select * from tuanshang_users ...
- php 传变量到 js 文件
php 传变量到 js 文件 // 传变量到js $oncj="taocanonc(".$i.",".$alli.",".$row1[mon ...
- js 的基础知识
一.弱类型意识 js变量是没有类型的 var a = 1; //a 就是一个变量 不要提什么类型 变量可以赋任何类型的值 类型仅仅是值的性质 与变量无关 Js的基本类型 变量未赋值时,其值为und ...
- JavaScript 基础——使用js的三种方式,js中的变量,js中的输出语句,js中的运算符;js中的分支结构
JavaScript 1.是什么:基于浏览器 基于(面向)对象 事件驱动 脚本语言 2.作用:表单验证,减轻服务器压力 添加野面动画效果 动态更改页面内容 Ajax网络请求 () 3.组成部分:ECM ...
- js 的基础知识变量
什么是变量? 变是一个存储和释放我的数据! 我们用var关键字来声名变量,声名多个变量时用逗号来隔开 在变量没有赋值之前,显示是一个未定义的变量! <script> var a; var ...
- JS 作用域与变量提升---JS 学习笔记(三)
你知道下面的JavaScript代码执行时会输出什么吗? var foo = 1; function bar() { if (!foo) { var foo = 10; } console.log(f ...
- 第23篇 js快速学习知识
前面说了js的一些高级方面的基础知识,这些都是比较容易出错的和比较难理解的东西,除了这些之外其它的知识都比较简单了,基础学好了,扩展起来就是小意思.今天说说js方面可以快速学习和入门的知识. 1.闭包 ...
随机推荐
- Ascall 码特殊字符——去除从windows上传文件的^M
在windows上编辑过的文件如果传到unix上,在每个文件的末尾都会有一个换行控制符^M,这个字符一般处于隐藏状态,除非cat -A才能看到,如果不去掉这个符号,很多脚本不能正常运行,很多文件不能正 ...
- angular4.0单个标签不能同时使用ngFor和ngIf
这个问题估计是ng4严格了语法规范的原因. 介于这篇太短,附上图助助兴致 解决办法: <div *ngFor="表达式"> <ng-container *ngIf ...
- 【SmartOS】轻量级多任务调度系统
SmartOS是一个完全由新生命团队设计的嵌入式操作系统,主要应用于智能家居.物联网.工业自动化控制等领域. ARM Cortex-M系列微处理器几乎全都做成单核心,对于业务逻辑较复杂的物联网就显得难 ...
- DAY2-java对你有点好感2018-1-10
第二天,对你有好感,还是不想复习,继续学习!! 第一天:归在日记分类,不能改为随笔,无奈/ 链接http://www.cnblogs.com/archer-lcy/diary/2018/01/09/8 ...
- Django_'utf-8' codec can't decode 问题解决
最近用vs2017新建django模板项目时,页面输入中文时导致编码错误,如下图: 几经排查,原来是对应的html文件保存的编码错误,重新用utf-8保存即可
- 180114 用装饰器实现在不改变函数调用者的代码基础上,实现在函数执行前后分别打印"before" 和 "after"
def bef_aft(func): #定义一个名为bef_aft的函数名 ,()里的是函数的参数,设置为func, 函数的参数分为实参和形参,有个参数传递的概念 ,下面有很多的解释 def PRin ...
- CSS基础知识(概念、块级元素、行内元素、选择器)
1.CSS概念 全称为Cascading Style Sheets(层叠样式表),支持专有的文件 - 扩展名为".css" 作用:将HTML的结构(HTML标签即html)与样式( ...
- 类Unix平台程序调试
GNU Binutils GNU Binutils 建立main.c文件,内容如下: #include <stdio.h> void main() { int a = 5/0; } 编译m ...
- python网络数据采集(伴奏曲)
这里是前章,我们做一下预备.之前太多事情没能写博客~.. (此博客只适合python3x,python2x请自行更改代码) 首先你要有bs4模块 windows下安装:pip3 ...
- 前端Web开发MVC模式-入门示例
MVC概论起初来之桌面应用开发.其实java的structs框架最能体现MVC框架:model模型是理解成服务器端的模块程序:view为发送给客服端的内容:control为servlet程序控制跳转和 ...