JS是弱类型编译语言(解释型语言)
编译执行:把代码编译成CPU认识的语言(文件),然后整体的执行。 解析执行:一行一行解析,解析一行执行一行。
JS组成
ECMAScript(前身为欧洲计算机制造商协会) JavaScript的语法规范
DOM(Document Object Model 的简称) JavaScript操作网页上元素的API
BOM(Browser Object Model 的简称) JavaScript操作浏览器部分功能的API
js输出消息的五种方式
- alert() 在页面弹出一个对话框,早期JS调试使用。
- confirm() 在页面弹出一个对话框, 常配合if判断使用。
- console.log() 将信息输入到控制台,用于js调试。
- prompt() 弹出对话框,用于接收用户输入的信息。
- document.write() 在页面输出信息或标签。
JS注释、CSS注释、HTML注释对比
HTML注释: 是HTML的注释标签,使用<和>是符合HTML标签语法规则的 html中具有判断作用的注释。: 以下代码是通过html注释让不同版本IE浏览器读取不同内容,并让对应浏览器显示或执行。和>
<h1>您正在使用IE浏览器</h1>
<!--[if IE 6]>
<h2>如果IE版本是 6,我将被IE6浏览器显示</h2>
<![endif]-->
<!--[if IE 7]>
<h2>如果IE版本是 7,我将被IE7浏览器显示</h2>
<![endif]-->
CSS注释: /* 注释内容 / 通配符 只有IE浏览器可以理解(对其他浏览器都隐藏) 反斜线 如果你希望IE/Win有效而IE/Mac隐藏,可以使用“反斜线”技巧
JS的注释 /* (注释代码块) */ //(注释单行)
变量命名规则
驼峰命名规则:getElementById/matherAndFather/aaaOrBbbAndCcc
遵从规则: 1.变量命名必须以字母或是下标符号”_”或者”$”为开头。 2.变量名长度不能超过255个字符。 3.变量名中不允许使用空格,首个字不能为数字。 4.不用使用脚本语言中保留的关键字及保留符号作为变量名。 5.变量名区分大小写。(javascript是区分大小写的语言)。 6.汉语可以作为变量名。但是不建议使用!
数据类型
判断数据类型
typeof(name) 或者 typeof name
- 简单数据类型 number、string、 boolean、undefined、null
- 复杂数据类型 Object、function、Array、Date、RegExp、Error…….
数据类型介绍
Number
进制
浮点数
数值范围
NaN not a number。不是数字的数字类型。alert(typeof(NaN))//number 一旦程序中出现了NaN,一定是程序中进行了非法的运算操作。 NaN的boolean是false。 NaN和自己都不相等。
isNaN()— 判断某些值是不是数字,,,不喜欢数字、讨厌数字,,,只要遇到数字,就返回false。
- alert( isNaN( function(){ alert(1) } ) );//true
- isNaN(“blue”); // true
- isNaN(NaN);// true
- alert( isNaN(‘250’) ); //false,内部实现靠的是Number,凡是Number()可以转化的,都返回false. Number() ‘250’ => 250 => false
- alert( isNaN( [] ) );//false
- alert(isNaN(true));//false
String
注意:在简单数据类型中,字符串不可变。 str的旧值在内存中不会立刻消失,只能二次赋值,原有的字符在一定时间内被垃圾回收器回收。
如下代码的执行过程是,在内存的栈空间放入str,值为undefined,str指向该地址->执行第二行时,给str赋值,同时undefined被覆盖->执行第三行,在内存中新占用一个地址,放入新值,同时str的指针指向改为新地址。
var str;
str = "anc";
str = "adfsadfasdf";
Boolean
Boolean类型有两个字面量:true和false,区分大小写。(大写不对)
虽然Boolean 类型的字面值只有两个,但 ECMAScript中 所有类型的值都有与这两个 Boolean 值等价的值
true、除0数字、“something”、Object(任何对象)为true false、0 、“”、undefined 、null为false
if判断时会把()内的值强行转换成boolean类型进行判断。
undefined和null
null和undefined有最大的相似性。null == undefined的结果(true)也就更说明这点。但是null ===undefined的结果(false),说明还是有区别的。
undefined:定义了变量,没有给变量赋值(未初始化),变量在内存中是存在的。 null:变量未引用,值为空。也就是在内存中找不到这个变量。一般用于销毁对象。 ‘’:空表示在内存中可以找到这个变量。
在和数字运算时,10 + null结果为:10; 10 + undefined结果为:NaN。
任何数据类型和undefined运算都是NaN; 任何值和null运算,null可看做0运算。
数据类型转换
任何简单类型转换成String(三种)
- 变量+“” 或者 变量+“abc” null、undefined会被转化为字符串”null”,”undefined”
- String(变量)
- 变量.toSting()
注意: Null和undefined无toString方法。
任何简单类型转换成Number
此转换容易产生NaN,一旦被转换的变量中含有非数字字符,都容易出现NaN
*特别提示: *Boolean类型中:true数值为1;false为0; null的数值类型为0; undefined无数值类型或者为NaN;
- Number() 数字字符串,转换之后得到的数字。 小数数字字符串,转换之后得到的是原数字。 非数字字符串,转换之后得到是NaN。
- parseInt() 整数字符串,转换之后得到的整数数字。 数字开头的字符串,转换之后得到的是前边的数字。 非数字开头的字符串,转换之后得到的是NaN。 小数类型的字符串,转换之后取整。
- parseFloat 整数字符串,转换之后得到的整数数字。 数字开头的字符串,转换之后得到的是前边的数字。 非数字开头的字符串,转换之后得到的是NaN。 小数字符串,转换之后得到的是原数字。
任何简单类型转换成Boolean
任何数据类型都可以转换成boolean类型,所以和以往两个转换不同;
数字和字符串转完之后为true。 undefined、null、0转完之后为false.
- Boolean()
- !!变量
操作符
算术运算符 比较运算符 逻辑运算符 赋值运算符
优先级
- ()
- !、-(负数)、++、– (正数省略+)(一元运算)
- *、/、%
- +、-(加减二元运算)
- <、<=、<、>= (一级逻辑运算)
- ==、!=、===、!==、 (二级逻辑运算)
- && (三级逻辑运算)
-
- ?: (三元运算)
- =、+=、-=、*=、/=、%= (赋值运算)
流程控制
注意,switch语句中:
break可以省略,如果省略,代码会继续执行下一个case
switch 语句在比较值时使用的是全等操作符,因此不会发生类型转换 (例如,字符串 “10” 不等于数值 10)。
switch语句执行效率比if(条件1){程序1}else if(条件2){程序2}…else{程序n} 高