发表于: 2021-05-02 21:13:49

1 2394


今天完成的事情:JS字符串转换数字;JS有限状态机


明天计划的事情:理解JS作用域与作用域链;JS对象;


收获:

有限状态机:(Finite-state machine)是一个非常有用的模型;有限状态机的写法,逻辑清晰,表达力强,有利于封装事件。

它有三个特征:状态总数(state)是有限的;

任一时刻,只处在一种状态之中;

某种条件下,会从一种状态转变(transition)到另一种状态。


下面例子可以用到有限状态机:网页上有一个菜单元素,鼠标悬停的时候,菜单显示;鼠标移开的时候,菜单隐藏。如果使用有限状态机描述,就是这个菜单只有两种状态(显示和隐藏),鼠标会引发的状态转变。

var menu = {
    // 当前状态
    currentState'hide',
    // 绑定事件
    initializefunction () {
        var self = this;
        self.on("hover"self.transition);
    },//这里要用逗号
    // 状态转换
    transitionfunction (event) {
        switch (this.currentState) {
            case "hide":
                this.currentState = 'show';
                doSomething();
                break;
            case "show":
                this.currentState = 'hide';
                doSomething();
                break;
            default:
                console.log('Invalid State!');
                break;
        }
    }
};
生成实例以后,就可以随时查询当前状态:
fsm.current :返回当前状态。
fsm.is(s) :返回一个布尔值,表示状态s是否为当前状态。
fsm.can(e) :返回一个布尔值,表示事件e是否能在当前状态触发。
fsm.cannot(e) :返回一个布尔值,表示事件e是否不能在当前状态触发。

允许为每个事件指定两个回调函数:
onbeforewarn:在warn事件发生之前触发。
onafterwarn(可简写成onwarn) :在warn事件发生之后触发。
也允许为每个状态指定两个回调函数:
onleavegreen :在离开green状态时触发。
onentergreen(可简写成ongreen) :在进入green状态时触发。

可以为所有的事件和状态指定通用的回调函数:
onbeforeevent :任一事件发生之前触发。
onleavestate :离开任一状态时触发。
onenterstate :进入任一状态时触发。
onafterevent :任一事件结束后触发。


JS字符串转换数字的方法:转换函数、强制类型转换、利用js变量弱类型转换。

转换函数有两种:parseInt()和parseFloat();

parseInt()把值转换成整数;

parseInt("1234blue"); //returns 1234
parseInt("0xA"); //returns 10
parseInt("22.5"); //returns 22
parseInt("blue"); //returns NaN


parseFloat()把值转换成浮点数;

parseFloat("1234blue"); //returns 1234.0

parseFloat("0xA"); //returns NaN

parseFloat("22.5"); //returns 22.5

parseFloat("22.34.5"); //returns 22.34

parseFloat("0908"); //returns 908

parseFloat("blue"); //returns NaN


强制类型转换:

Boolean(value)——把给定的值转换成Boolean型;
Number(value)——把给定的值转换成数字(可以是整数或浮点数);
String(value)——把给定的值转换成字符串。


js变量弱类型转换:

例:

<script>

var str= '012.345 ';

var x = str-0;

x = x*1;

</script>

弱类型转换,只进行了算术运算,实现了字符串到数字的类型转换



返回列表 返回列表
评论

    分享到