js简述以及js基本

javascript是1995年网景创立 原名为livescript后改名为javascript;(当时工作于 Netscape 的 Brendan Eich (布兰登·艾奇),着手为即将在 1995 年发行的 Netscape Navigator 2.0 开发一个称之为 LiveScript 的脚本语言,当时的目的是在浏览器和服务器(本来要叫它 LiveWire)端使用它。Netscape 与 Sun 共同完成 LiveScript 实现。)

 

javascript运行在客户端的脚本语言,是嵌套在html中,能够被浏览器直接解析(与浏览器内核有关);可简称为js。

 

js作用:主用于写网页特效,表单验证,增加用户与浏览器之间的交互效果

 

js组成ECMAScript(组织,欧洲计算机制造商协会,用于规定js语法规范;ES5即是说ECMAScript的第五版)、BOM(浏览器对象模型)、DOM(文档对象模型)

 

在js中注释的方法有两种:

                         “//”为单行注释

                        “/* */”为多行注释

js的标签为:

<script></script>    <script type="text/javascript"></script>   ; 一般我会写于</html>之后,也就是说其实可以写在body里,一般也会推荐写在</body>的前面:

  1.避免因为加载(下载)脚本或脚本运行过慢,阻塞页面。

  2.防止脚本运行时,页面未加载完成,造成script要操作的DOM结点没有加载完成而出错。

      但是个人习惯则写在</html>之后;用于控制html和css。

 

js的输出语句:①document.write("内容");        //输出在浏览器页面上

         ②alert("内容");         //以弹窗的方式输出

                ③console.log("内容");     //输出在控制台中(F12)主用于调试bug  一般最常用的也是console.log;他会在代码错误的时候提供信息。

:①如输出的为字母或中文,用引号包起来,可单引号也可多引号;除非他是变量。

  ②如输出的为数字,引号可加可不加。

  ③在浏览器页面中换行用<br/>;在非浏览器中(弹窗,控制台等)换行用\n。

  ④如果输出的是变量,一定不能加引号。(加引号就会当作字符串,会原样输出)

  ⑤如果输出的有字符串和变量,字符串和变量之间用“+”进行连接。(eg:document.write(“我的名字是” + userName + "<br/>"))

 

js(常量):在程序运行的过程中,始终不变的值(量)叫常量。(数值型:整数、小数;字符型:“”或‘’括起来的字符串)

js(变量):在程序运行的过程中,值可能会发生改变的量叫变量。(输出变量时不能加引号;先定义变量,在使用变量)

 

定义变量的两种方式:

①显示定义:var 变量名 = 值       (var为关键字(定义)  var与变量名之间有空格,变量名与=与值之间的空格非必加,但是个人认为为了代码看着不拥挤以及美观这里推荐加上空格)

②隐示定义:变量名 = 值 

  eg:

   var a = 1;    //把1赋值给a;

     var b = "abc";

             a = 2;   //已经var 了一个a 则改变a值时无需再var一个a;

 

定义的变量名的注意事项:

①字母、数字、下划线、$可以任意组成变量名(但不能以数字开头;禁止用中文命名)

②不能使用关键字和保留字(关键字:js中的关键字可用于表示控制语句的开始或结束,或者用于执行特定操作等。保留字:其实就是在以后可能会作为关键字的。)

③要做到见名识意(语义化)

④关于驼峰式命名:大驼峰、小驼峰(大驼峰:多个单词组成,每一个单词的首字母大写(UserName);小驼峰:多个单词组成,第一个单词首字母小写,其他单词首字母大写(userName))

 

js 的数据类型

①基本数据类型:数值型(number)、字符串(string)、布尔(boolean)

②特殊数据类型:underfined(定义了对象,未赋值)、null(空)

③复合数据类型(一般叫引用数据类型):对象(object):{ }(对象)、[ ](数组)

 

也可分为两类:一般也只说两类:

①基本数据类型:数值型(number)、字符串(string)、布尔(boolean)、underfined(定义了对象,未赋值)、null(空)

②引用数据类型:对象(object):{ }(对象)、[ ](数组)

 

在①中数值型为:整数,小数;     字符串为:单/双引号包起来的都是字符串;     布尔为:true、false

注:在引号中嵌套:外面是双引号,里面就为单引号;反之。

 

 

基本数据类型不能动态的添加属性和方法;

 

引用数据类型可以动态的添加属性和方法。

 

基本数据类型操作的是值
引用数据类型操作的是引用地址

 

内存

 

基本数据类型:存储值在栈里。(先进后出FILO)FILO—First-In/Last-Out

 

引用数据类型:存储地址(十六进制xxxfff000)在栈里,内容存储在堆里。(先进先出FIFO)FILO—First-In/First-Out

 

 

检测数据类型的方法:

typeof:  

typeof  变量/值(typeof与变量/值之间有空格)

typeof(变量/值)(typeof与(变量/值之间无空格))

            eg:console.log(typeof num);

检测数据类型的时候,检测出来的值都是加了引号的(所以他本身是字符串),但是在控制台中显示不出来。即:

  只要多写一个typeof 检测出来的都是"string",也就是用typeof检测另一个typeof出来的值 都是"string"

typeof弊端:在检测为null的时候会显示为object。

 

准确判断一个数据的类型:

object.prototype.toString.call()

let a = "string";
let b = 111;
let c = {};
let d = [1, 2, 3];
let e = function () {
    console.log("eee");
}
let f = undefined;
let g = null;
let h = new Date();
let i = /test/;
let j = true;

console.log(Object.prototype.toString.call(a) === '[object String]');//true
console.log(Object.prototype.toString.call(b) === '[object Number]');//true
console.log(Object.prototype.toString.call(c) === '[object Object]');//true
console.log(Object.prototype.toString.call(d) === '[object Array]');//true
console.log(Object.prototype.toString.call(e) === '[object Function]');//true
console.log(Object.prototype.toString.call(f) === '[object Undefined]');//true
console.log(Object.prototype.toString.call(g) === '[object Null]');//true
console.log(Object.prototype.toString.call(h) === '[object Date]');//true
console.log(Object.prototype.toString.call(i) === '[object RegExp]');//true

console.log(Object.prototype.toString.call(c) === '[object Object]');//true
console.log(Object.prototype.toString.call(d) === '[object Object]');//false
console.log(Object.prototype.toString.call(e) === '[object Object]');//false

 

js运算符:就是操作运算的符号:就像  &&(且)   !(非)  + (是加号但又不只是加号)  ?(条件运算符里的条件)等;

js表达式:可以为常量、变量、一个式子。

 

js的算术运算符

①单目(一元):++     - -

②双目(二元):+   -   *   /   %(求余/求模)(任何一个数%10都能把这个数的个位数取出来)

 

关于①:操作数必须是变量

i++ 和 ++i 的区别:

相同点:变量i都会自增1;

不同点:i++先让 i 值赋给整个表达式(也就是整个表达式的值=i),再自增1;反之++i先自增1,再赋值给整个表达式(也就是整个表达式的值为 i+1)。

关于②:

在  -   *   /   %中:

①如果两边都是数值型,可以进行正常运算;

②如果有一侧是纯数字字符串,js会自动将其转为数值型参与计算;

③如果有一侧是非数字字符串,结果为NaN(NaN:not a number  不是一个数  并且NaN本身也不等于本身,NaN的数据类型是number)

eg:

console.log( 3 - 1 ); //2

console.log("3" - 1); //2

console.log("3" - "a"); //NaN

console.log("3" / 3); //1

console.log("3" % 7); //3

 

+:

①两侧都是数值型时,可以正常运算;

②只要有一侧是字符串,“+”  就代表连接    "a" + 1 = a1 ;

 

赋值运算符:+=  -=  *=  /=  %=

+= :

var x = 10;

x += 10;   // x = x + 10;   //20

-=:

var x = 9;

x -= 10;    // x = x - 10;   //-1

*=:

var y = 1;

y *= 10; //  y = y * 10;    //100

...

 

关系运算符:(比较运算符)

>     <      ==(等于)     >=     <=    !=(不等于)    ===(全等)     !==(不全等)

比较的结果为布尔值:true,false

 

== 与 ===的区别

==:不看数据类型,只要值相等,则true;   (null == undefined  为true;值都无)

===:先看数据类型再看值,若不等,则false.   

 

字符串的比较:比较的是ASCII码值,从左到右比较,知道比较出结果为止。

a:97  b:98  c:99....

A:65  B:66  C:67...

以此类推。

 

逻辑运算符:&&(与/且)  ||(或)  !(非)

情况一:&&如果两侧都为真,整个表达式为真;一侧为假,整个表达式为假。

      eg:console.log(6>5 && 5>4);//true && true      true

                console.log(6>5 && 4>5);//true && false     false

     || 如果有一侧为真,整个表达式为真;两侧都为假,整个表达式为假。

      eg:console.log(6>5 || 3>4);//true

        console.log(5>6 || 3>4);//false

     非假即真,非真即假

      eg:console.log(!false);//true

        console.log(!true);//false

情况二://短路

console.log(6>7 && 5>4);//false        //第一个式子已经为假,则不进行下一个式子的运算

console.log(6>5 || 5>7);//false          //第一个式子已经为真,则不进行下一个式子的运算

 

情况三:

console.log(6>5 && 4);//4          //第一个式子为真,运行到4,为真,但是是具体的值则输出具体的值

console.log(5>6 || 3);//3            //第一个式子为假,运行到3,为真,为具体数值则输出3

 

 

条件运算符:(三目运算符)    ?:

表达式1?表达式2:表达式3;

如果表达式1成立,则输出表达式2;

如果表达式1不成立,则输出表达式3.

 

输入对话框:prompt(“提示语句”);

特点:是一个输入框,有一个确认按钮,有一个取消按钮

如果你想看输入的值,要用一个变量去接收他,若点击确定按钮,变量里存的为你的i输入值;若点击取消按钮,变量里存的为null.

ParseInt()  将字符串转为数值型,并且数值取整。

.toFixed(x)保留位x小数.(会执行四舍五入)

posted @ 2018-12-24 16:22  一直敲敲敲  阅读(686)  评论(0编辑  收藏  举报